我正在使用Heroku + Amazon S3 + Paperclip gem组合来上传文件。它工作正常,但上传本身非常慢。
我试图买一个额外的dyno并稍微更新了模型:
class Image < ActiveRecord::Base
belongs_to :imageable, :polymorphic => true
belongs_to :user
belongs_to :album
attr_accessible :caption, :title, :image, :image_file_name, :user_id, :album_id
has_attached_file :image,
:styles => { :tiny => '100x100>',
:original => "900x900>" },
:path => ":rails_root/public/images/:user_id/:style/:basename.:extension",
:url => ":s3_eu_url"
process_in_background :image
end
这在Heroku上工作得非常快,但是:我选择要上传的文件,点击按钮上传,几秒钟内刷新页面。我没有看到上传的图片本身,因为尚未上传。但是后台进程会上传它。 当我像2-4秒后刷新页面时,我正确地看到上传的图像。
但这不是用户友好的方式。 如何使用Paperclip和延迟作业快速将图像上传到Heroku?我错过了什么来正确设置它?
由于
答案 0 :(得分:0)
尝试一个名为CarrierWaveDirect的新Gem,它允许您使用html表单将文件直接上传到S3,并轻松将图像处理移动到后台进程
答案 1 :(得分:0)
从用户的角度来看,你永远无法避免从个人电脑上传到完成处理(和/或复制到s3)所需的时间
您可以做的最好的事情是改善您的用户体验,但要么显示文件尚未完成处理的消息,要求用户返回并稍后再试。
也就是说,您可以直接上传到s3(但没有回形针,因为这是您的处理器,并且您需要在heroku服务器(或任何其他服务器)上进行imagemagick处理您的样式。
请参阅此How do I upload direct to S3 with Paperclip has_attached_file connected to a model?
和http://aws.amazon.com/articles/1434?_encoding=UTF8&jiveRedirect=1
当向用户发送一条消息来解决原始问题(这是为了提高用户友好性)时,自己处理所有这些可能会非常痛苦。
答案 2 :(得分:0)
1)如果您的应用程序可以使用,您可以将s3存储桶位置更改为US East作为其他解决方案。它不会完全解决问题,但会提高上传速度。
2)您可以使用s3_direct_upload直接上传到s3。 http://blog.littleblimp.com/post/53942611764/direct-uploads-to-s3-with-rails-paperclip-and
答案 3 :(得分:0)
最近我更喜欢及时进行图像处理。太多次我使用paperclip只是为了在重新设计过程中改变前端要求,迫使我在批处理作业中重新处理所有UG图像。
我创建了一个适合与rails一起使用的简单gem,让您代理用户上传的图像并通过更改url参数按需处理它们:https://github.com/jcihocki/uncut
它接受您在paperclip中的:styles hash中提供的相同类型的几何字符串。它相对较新,但也很简单,我在生产中使用它。贡献也欢迎。
用法:
<%= $your_cdn_base_uri + processed_image_uri_for( "http://mybucket.s3.amazonaws.com/path/to/img.jpg", '100x100>' ) %>