使用Paperclip重新处理S3资产

3

背景:

我已经按照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上查看了其他答案。

使用S3时Paperclip寻找本地文件重新处理 - 看起来相关,但唯一的答案涉及降级Paperclip。我不能这样做,而且那个答案既没有被赞同也没有被接受。

Paperclip 2.3.5中的错误重新处理 - 这是关于旧版本的Paperclip。

其他想法:

我想到的另一种方法是在裁剪之前将文件存储在本地,然后使用DelayedJob或类似的东西稍后将其上传到S3。不过这将需要更多的工作,所以我现在宁愿避免这样做。

1个回答

0
为了更好地理解发生的情况,看到您的模型设置会很棒。具体来说,我正在寻找“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 看起来它几乎是在获取您的路径变量,但没有到您的 S3 存储桶中获取该图像。因此,我会检查存储值,特别是。

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


嗨,我实际上一段时间之前已经全部转移到了 Dragonfly!但是查看 git,原始代码是:has_attached_file :picture, :styles => { ... }, :default_url => 'missing_:class_:attachment/missing_:style.png', :storage => :s3, :s3_credentials => S3_CONFIG - Leo
嗯,快速浏览了一下Paperclip的Git,我找到了以下链接。这个链接描述了更改Paperclip设置定义的内容: https://github.com/thoughtbot/paperclip/issues/1405这个链接描述了类似的问题,但是是在原始帖子几年后发布的,并且仍然保持开放状态。 https://github.com/thoughtbot/paperclip/issues/2217话虽如此,我相信我已经成功地重新处理了我的图像(从s3拉取并重新上传),所以我将尝试按照这个教程构建项目并更新我的答案。 - Jakeland McCarthy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接