Ruby on rails 3 用回形针上传速度非常慢(独角兽)

Ruby on rails 3 用回形针上传速度非常慢(独角兽),ruby-on-rails-3,imagemagick,openmp,vps,unicorn,Ruby On Rails 3,Imagemagick,Openmp,Vps,Unicorn,坐在这里,使用一个简单的rails 3应用程序,其中我有一个简单的图库模型,每个图库都有许多图像。图像模型使用回形针和以下选项进行扩展 has_attached_file :local, :styles => { :large => "800x800>", :medium => "300x300>", :thumb => "100x100#", :small => "60x60#" } 在我的

坐在这里,使用一个简单的rails 3应用程序,其中我有一个简单的图库模型,每个图库都有许多图像。图像模型使用回形针和以下选项进行扩展

has_attached_file :local, 
   :styles => {
     :large => "800x800>", 
     :medium => "300x300>", 
     :thumb => "100x100#", 
     :small => "60x60#"
   }
在我的U控制器中,为了使用插件,我执行了以下操作。因此,json响应

def add_image
   gallery = Gallery.find params[:id]
   image = gallery.images.new({:local => params[:local]})
   if image.save
     render :json => {:thumb => image.url(:thumb), :original => image.url}
   else  
    render :json => { :result => 'error'}
   end
end
对我来说,这相当直截了当。但问题来了。在mongrel的开发中,任何类型的上传都可以正常工作,大约500-1000ms/上传

然而,当我把它投入生产时,我的独角兽工作人员总是超时,当它发送一个图像时,一个文件需要30-55秒

我上传的文件大小约为100k

我已经用ipref测试了我的VPS和我的dev计算机之间的带宽,平均速度约为77kbps,因此上传应该不会有问题

注意,我还使用具有化身的用户模型的同一应用程序对非ajax文件上传进行了测试。 开发=>在693毫秒内完成302个 生产=>在21618ms内完成302


谁经历过类似的问题(Rauls3,UnCORN)文件上传?

< P>如果处理需要很长时间,考虑在一个单独的工人中处理缩略图。

请求:接受文件;保存到磁盘;将作业发布到队列 工作者:从队列中弹出作业;创建缩略图;重复


延迟::Job和Resque是解决这一问题的好方法。

因此,在深入研究之后,我设法确定,在我的VPS上,是ImageMagick中的OpenMP选项导致了非常缓慢的操作。因此,我的第一次尝试是重建本机Ubuntu 10.04包,并添加了--disable openmp标志。由于某种原因,这失败了,尽管我不确定为什么程序包在openMP仍处于活动状态的情况下继续运行。我目前的解决方案是从Ubuntu10.10向后移植ImageMagick。以下是我采取的步骤:

步骤1下载以下文件:

  • imagemagick_6.6.2.6-1ubuntu1.1.dsc
  • imagemagick_6.6.2.6.orig.tar.bz2
  • imagemagick_6.6.2.6-1ubuntu1.1.debian.tar.bz2

步骤2打开包装

$ dpkg-source -x imagemagick_6.6.2.6-1ubuntu1.1.dsc
步骤3编辑规则

$ cd imagemagick-6.6.2.6
$ vim debian/rules
在第25-39行的./configure语句中添加以下行。我在第34行加了我的

34: --disable-openmp \
步骤4添加依赖项并构建(我需要这些依赖项)

第5步淘汰旧款,换新款

$ sudo apt-get remove --purge imagemagick
$ sudo dpkg -i libmagickcore3_6.6.2.6-1ubuntu1.1_amd64.deb
$ sudo dpkg -i libmagickwand3_6.6.2.6-1ubuntu1.1_amd64.deb
$ sudo dpkg -i imagemagick_6.6.2.6-1ubuntu1.1_amd64.deb
步骤6再次进行快速图像转换

_before_ (with openmp)
$ time utilities/convert 'image.jpg' -resize "x60" -crop "60x60+10+0" +repage 'thumb'
real    0m11.602s
user    0m11.414s
sys  0m0.069s

_after_
$ time utilities/convert 'image.jpg' -resize "x60" -crop "60x60+10+0" +repage 'thumb'
real    0m0.077s
user    0m0.058s
sys  0m0.019s

感谢Ariejan的评论,但是不需要将此操作放入后台工作人员中。不过我已经考虑过了。你应该把问题放在最上面,然后在下面的回答中给出你的答案,然后你接受(你可以接受你自己的答案)谢谢约翰,抱歉把事情搞砸了,我终于花时间问了(我希望)坚持堆栈溢出格式。我发现这与上载无关,瓶颈似乎是imagemagick,每次转换操作大约需要10秒以上的时间。将深入挖掘并更新。伟大的解决方案,也帮助了我!或者,我从源代码处编译ImageMagick,使用
configure--prefix=/opt/ImageMagick--disable openmp
,安装它,然后制作一个符号链接
ln-s/opt/ImageMagick/bin/convert/usr/bin/convert
_before_ (with openmp)
$ time utilities/convert 'image.jpg' -resize "x60" -crop "60x60+10+0" +repage 'thumb'
real    0m11.602s
user    0m11.414s
sys  0m0.069s

_after_
$ time utilities/convert 'image.jpg' -resize "x60" -crop "60x60+10+0" +repage 'thumb'
real    0m0.077s
user    0m0.058s
sys  0m0.019s