4

シンプルなRails3アプリを使ってここに座っています。このアプリでは、シンプルなギャラリーモデルがあり、各ギャラリーには多くの画像があります。画像モデルは、ペーパークリップと次のオプションで拡張されます

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〜1000ms/アップロードで問題なく機能します。

ただし、本番環境にプッシュすると、ユニコーンワーカーのタイムアウトが常に発生し、画像が送信されると、1つのファイルに対して30〜55秒かかります。

私がアップロードするファイルのサイズは約10万です

私はVPSと開発用コンピューターの間の帯域幅をiprefでテストし、平均速度が約77kbpsになっているので、アップロードに問題はないはずです。

アバターを持つユーザーモデルで同じアプリを使用して、ajax以外のファイルのアップロードでもテストを行ったことに注意してください。開発=>693msで検出された302完了生産=>21618msで検出された302完了

(rails3、unicorn)ファイルのアップロードで同様の問題が発生した人はいますか?

4

2 に答える 2

4

そのため、掘り下げた後、VPS で非常に遅い操作を引き起こしているのは ImageMagick の OpenMP オプションであることがわかりました。そのため、私の最初の試みは、 --disable-openmp フラグを追加して、ネイティブの 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

ここから

ステップ 2パッケージを解凍する

$ dpkg-source -x imagemagick_6.6.2.6-1ubuntu1.1.dsc

ステップ 3ルールを編集する

$ cd imagemagick-6.6.2.6
$ vim debian/rules

次の行を ./configure ステートメントの 25 ~ 39 行目に追加します。私は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
于 2011-11-06T10:34:56.757 に答える
0

処理に時間がかかる場合は、サムネイルを別のワーカーで処理することを検討してください。

リクエスト:ファイルを受け入れます。ディスクに保存します。キューワーカーへのジョブの投稿:キューからジョブをポップします。サムネイルを作成します。繰り返す

Delayed :: JobとResqueは、このための優れたソリューションです。

于 2011-03-23T13:07:06.170 に答える