使用Paperclip重新处理S3资产

时间:2013-11-26 10:49:58

标签: ruby-on-rails-3 amazon-s3 paperclip

背景

我已经按照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。这将是更多的工作,所以我现在宁愿避免它。

1 个答案:

答案 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桶来获取该图像。所以我会特别检查存储值。

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