2

我正在使用 Heroku + Amazon S3 + Paperclip gem 组合来上传文件。它正在工作,但上传本身非常慢。

我尝试购买额外的测功机并稍微更新了模型:

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 秒后刷新页面时,我正确地看到了上传的图像。

但这不是非常用户友好的方式。如何使用回形针和延迟作业快速将图像上传到 Heroku?我缺少什么来正确设置它?

谢谢

4

4 回答 4

0

1) 如果您的应用程序可能,您可以将 s3 存储桶位置更改为美国东部作为附加解决方案。它不会完全解决问题,但会提高上传速度。

2)您可以使用 s3_direct_upload 直接上传到 s3。http://blog.littleblimp.com/post/53942611764/direct-uploads-to-s3-with-rails-paperclip-and

于 2013-07-21T12:37:03.187 回答
0

从用户的角度来看,您将永远无法避免从完成从 pc 上传到完成处理(和/或复制到 s3)所需的时间

您可以做的最好的事情是改善您的用户体验,但要么显示文件尚未完成处理的消息,并要求用户返回并稍后再试。

也就是说,您可以直接上传到 s3(但没有回形针,因为那是您的处理器,并且您需要 heroku 服务器(或任何其他服务器)上的 imagemagick 来处理您的样式。

看到这个如何使用连接到模型的 Paperclip has_attached_file 直接上传到 S3?

http://aws.amazon.com/articles/1434?_encoding=UTF8&jiveRedirect=1

当给用户的一点信息就可以解决您最初的问题(这是为了提高用户友好性)时,您自己处理所有这些可能会很痛苦

于 2013-07-21T08:36:00.320 回答
0

最近我更喜欢及时进行图像处理。太多次我使用回形针只是为了在重新设计期间更改前端要求,这迫使我在批处理作业中重新处理所有 UG 图像。

我创建了一个适合与 rails 一起使用的简单 gem,它可以让您代理用户上传的图像并通过更改 url 参数按需处理它们:https ://github.com/jcihocki/uncut

它接受您在回形针中的 :styles 哈希中提供的相同类型的几何字符串。它相对较新,但也很简单,我正在生产中使用它。也欢迎投稿。

用法:

<%= $your_cdn_base_uri + processed_image_uri_for( "http://mybucket.s3.amazonaws.com/path/to/img.jpg", '100x100>' ) %>
于 2013-07-21T16:14:33.877 回答
0

尝试一个名为CarrierWaveDirect的新 Gem ,它允许您使用 html 表单将文件直接上传到 S3,并轻松将图像处理移动到后台进程中

于 2013-07-21T08:17:59.570 回答