ruby-on-rails-3 - 用回形针上传很慢( unicorn )

标签 ruby-on-rails-3 imagemagick openmp vps unicorn

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

has_attached_file :local, 
   :styles => {
     :large => "800x800>", 
     :medium => "300x300>", 
     :thumb => "100x100#", 
     :small => "60x60#"
   }

在我的galleries_controller 中,我实现了以下操作以使用jQuery-File-Upload插入。从而是 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

对我来说,这是相当直接的。但问题来了。在混杂的开发中,任何类型的上传都可以正常工作,大约 500-1000 毫秒/上传。

但是,当我将它插入生产环境时,我的 unicorn worker 不断地超时,并且当它确实通过它发送图像时,一个文件需要 30-55 秒。

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

我已经使用 ipref 对我的 VPS 和我的开发计算机之间的带宽进行了一些测试,平均速度约为 77kbps,因此上传应该不成问题。

请注意,我还使用具有头像的用户模型使用相同的应用程序对非 ajax 文件上传进行了测试。
开发 => 完成 302 发现在 693ms
生产 => 已完成 302 发现于 21618 毫秒

任何人都遇到过 (rails3, unicorn) 文件上传的类似问题?

最佳答案

因此,在挖掘之后,我设法确定在我的 VPS 上是 ImageMagick 中的 OpenMP 选项导致了非常缓慢的操作。因此,我的第一次尝试是使用添加的 --disable-openmp 标志重建 native Ubuntu 10.04 软件包。由于某种原因,这失败了,虽然我不确定为什么该软件包不断出现,但 openMP 仍然处于事件状态。我目前的解决方案是从 Ubuntu 10.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

  • 来自 here

    步骤 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 步 添加依赖项并构建(我需要这些依赖项)
    $ sudo apt-get install liblqr-1-0-dev librsvg2-dev
    $ dpkg-buildpackage -b
    

    步骤 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
    

    关于ruby-on-rails-3 - 用回形针上传很慢( unicorn ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5397683/

    相关文章:

    ruby-on-rails - rake 数据库 :schema:load vs. 迁移

    ruby-on-rails-3 - 如何在开发中的rails 3中使用hirefire进行delayed_job?

    ruby-on-rails - Ruby gsub 不替换换行符

    python - 将标准输出从命令行函数发送到 python StringIO 对象

    c - 在 SUSE linux 中找不到 omp.h 头文件

    ruby-on-rails - 为什么 Time.parse 在 Rails 4 和 5 中失败,但在 Rails 3 中对于日期和时间之间有空格的日期字符串却没有?

    grails - ImageMagick 和 Grails 不工作

    azure - Imagemagick 无法从 tif 转换为 jpg

    c - OpenMP 循环上的段错误(核心转储)

    r - R 和 RcppArmadillo 中的 OpenMP 支持