背景:

我大致按照Ryan Bates Railscast #182在图片上传中实现了用户定义的裁剪。

设置为:file存储方法时有效,但设置为:s3时无效。在添加中间裁剪步骤之前,S3存储工作正常。

从服务器日志中,它似乎正在本地查找源文件:

[paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: /profiles/pictures/000/001/543/original/headshot.jpg is not recognized by the 'identify' command.>


该文件存在于S3上,但目前还不在本地,因为上传之前(以及之后)都将对其进行处理。

我的问题:

在第二个处理步骤之前,如何将文件从S3传送到本地服务器?

N.B.我已经看过其他答案了。

Paperclip looking for file locally for reprocessing when using S3 –似乎相关,但唯一的答案是降级Paperclip。我无法做到这一点,而且,这个答案既没有被接受也没有被接受。

Error reprocessing in Paperclip 2.3.5 –这是关于Paperclip的旧版本。

其他想法:

在我看来,另一种方法是将文件存储在本地,直到被裁剪为止,然后使用DelayedJob或类似的方法稍后将其上传到S3。不过,这将需要更多工作,因此,我现在暂时避免这样做。

最佳答案

为了更好地了解正在发生的事情,很高兴看到您的模型已建立。具体来说,我正在寻找“ has_attached_file”设置。

只是为了涵盖我正在寻找的基本知识:这是一个示例

 has_attached_file :picture,
                path: <optional, default is fine.>
                url: ':s3_alias_url',
                s3_protocol: 'https',
                s3_host_alias: 'cdn.<something>.com' (or, s3.amazonaws.com/bucketname/,
                storage: :s3,
                s3_credentials: Proc.new{ |a| a.instance.credentials }


重新处理图像时,应将其放到临时文件中并在那里进行处理,然后使用这些设置重新上传。

基于profiles/pictures/000/001/543/original/headshot.jpg几乎看起来像是在抓取您的path变量,但没有去s3存储桶来获取该图像。因此,我将具体检查存储值。

有了更多信息,我可以适当地更新我的答案。

07-24 17:52
查看更多