Rails 2回形针与s3慢速图像上传

时间:2014-08-20 12:53:19

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

我正在使用paperclip gem的rails 2应用程序在s3上传图像。 有时上传图片需要很长时间,而且上传时间非常快。

所以问题与s3上的服务器空间或我的网速有关?

2 个答案:

答案 0 :(得分:1)

您的问题的答案是主观代码和互联网连接..

例如: -

  1. 如果您使用多种样式,例如: -

    :styles => {       :thumb => " 100×100#&#34 ;,       :small => " 150×150>&#34 ;,       :medium => " 200×200" }

  2. 然后..这可能需要时间...因为你正在运行时转换图像..这就是为什么我们delayed_paperclip只获得我们在其他即将到来的页面上真正需要的样式并转换其余的使用redis的背景中的样式。

    1. 有时当你在上传过程中添加多个文件时,由于每个上传的图像需要首先使用上述样式进行转换,然后在s3中转储到桶中,因此需要花费时间。所以句柄{{1在多个图像上传期间小心使用js和服务器端验证将多个上传限制为3个
    2. (这就是我的感受)您需要优化article has_many :photos方法并删除所有不需要的代码,并仅强调创建/保存对象,其余部分可以由image#createafter_create。使用rails profiler来理解和优化代码......

答案 1 :(得分:0)

在类似问题上查看我的post

基本上,使用Threads可以更快地显示 。它实际上不会让事情变得更快,它只会在一个单独的进程中运行代码,并且不会占用主代码执行时间。

加载下一页时,除非您在几秒钟后再次刷新页面,否则不会显示任何图像。

如果您一次保存一张图片。

# cats_controller.rb
def create
  @cat = Cat.find params[:id]
  mutex = Mutex.new

  Thread.new do
    mutex.synchronize do
      @cat.update cat_params
    end
  end
end

如果您一次上传多张图片

# cat.rb
def files=(array = [])
  threads = []
  semaphore = Mutex.new

  array.each do |f|
    threads << Thread.new do
      semaphore.synchronize do
        images.create file: f
      end
    end
  end
end