背景
我已经按照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。我已经在SO上查看了其他答案。
Paperclip looking for file locally for reprocessing when using S3 - 似乎相关,但唯一的答案是降级Paperclip。我不能这样做,而且,这个答案既没有被投票也没有被接受。
Error reprocessing in Paperclip 2.3.5 - 这是关于Paperclip的旧版本。
其他想法:
在我看来,另一种方法是将文件存储在本地,直到它被裁剪为止,然后使用DelayedJob或类似的东西稍后将其上传到S3。这将是更多的工作,所以我现在宁愿避免它。
答案 0 :(得分:0)
为了更好地了解正在发生的事情,看到您的模型设置会很酷。具体来说,我正在寻找&#34; has_attached_file&#34;建立。
只是为了涵盖我所寻找的基本知识:这里是一个例子
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
,它几乎看起来像抓住你的路径变量,但不会去你的s3桶来获取该图像。所以我会特别检查存储值。
有了更多信息,我可以适当地更新我的答案。