上传到Amazon S3的图片在生产环境下出现损坏(使用carrierwave和engineyard)。

5
我正在使用carrierwave将图片上传到Amazon S3。在开发中这个过程非常好用,但是当我将它推送到我的服务器(engineyard cloud trial)时就不行了。
这个过程没有出现错误,只返回了一个链接。然而,实际的图像却被损坏了,不知道为什么。
例如:https://s3.amazonaws.com/ZenBucket/uploads/goal/photo/30/guinness-toucan.jpg 有人能告诉我图像是如何被破坏的,或者是什么原因导致了它的破坏吗?
编辑:部署后第一次尝试上传图片总是失败500,但日志中没有显示错误。不确定这是否相关。
编辑2:似乎使用dragonfly gem也会出现这种情况。
谢谢。

其他人也遇到了这个问题吗?(从点赞数量来看,我猜是这样的) - Peter Ehrlich
你能提供你正试图上传的原始源图片吗?所有的图片都损坏了,还是只有在部署后的第一张损坏了? - Dan
这是原始内容:http://yfrog.com/ms0pubj - 所有图像都损坏了,一直如此。如果您能解决这个问题,我会增加赏金。 - Peter Ehrlich
你是从本地上传图片还是远程位置?另外,你上传到S3的store_dir是什么?如果在开发环境中可以工作但在生产环境中不行,则可能与你的部署设置有关。 - Dominic Tancredi
我不确定你所说的远程位置是什么意思,但已经尝试过多台机器。存储目录就是你在上面看到的:"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"。 - Peter Ehrlich
你能发布带有500错误的日志吗? - james2m
3个回答

0

似乎在jRuby上存在gzip压缩问题(可能与https有关),已经得到解决。如果有人需要我的堆栈版本号,我可以提供。


0

按照此处所述进行EngineYard的carrierwave / fog安装设置: http://www.engineyard.com/blog/2011/a-gentle-introduction-to-carrierwave/ 以及这里: http://docs.engineyard.com/use-carrierwave-and-optionally-fog-to-upload-and-store-files.html

您的“fog”公共设置是“false”还是“true”? 如果是“false”,请查看此线程,因为您需要使用“authenticated_url”属性而不是返回值: http://groups.google.com/group/carrierwave/browse_thread/thread/2f727c77864ac923


很遗憾,即使直接从s3面板中打开,该文件也已损坏。 - Peter Ehrlich

0

如果这只发生在部署后的第一张图片上,我会怀疑你的应用程序仍在加载(或至少有些工作人员正在加载),导致 CPU 使用率高并减慢上传过程,这可能会导致超时并同时损坏图像。

我假设 Engine Yard 只会在第一个请求时重新加载您的应用程序,这可能是原因。您应该尝试在部署后只“curl”您的应用程序,并等待几分钟以查看是否有所帮助。

EC2 上的小实例只有一个核心,在许多工作人员被重新启动时可能会变得非常缓慢。


你说的没错——第一次请求确实需要加载时间——但这并不是问题的原因。 - Peter Ehrlich

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