質問

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

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

私にとってこれはかなり簡単です。しかし、ここに問題があります。 Mongrelの下での開発では、あらゆる種類のアップロードが約500〜1000ms/アップロードされて正常に機能します。

しかし、それを生産に押し込むと、ユニコーン労働者のタイムアウトが常にあり、画像を介して画像を送信すると、1つのファイルに30〜55秒かかります。

アップロードされたファイルのサイズは約10万です

VPSとIPREFを使用して開発者コンピューターの間の帯域幅をいくつかテストし、約77kbpsの平均速度を得たので、アップロードは問題になりません。

また、アバターを備えたユーザーモデルを備えた同じアプリを使用して、非AJAXファイルアップロードを使用してテストを行いました。開発=> 693msで見つかった302完了生産=> 21618msで見つかった302完了

(Rails3、Unicorn)ファイルのアップロードで同様の問題を経験した人はいますか?

役に立ちましたか?

解決

そのため、掘り下げた後、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

25-39行の./configure statmentにフォローラインを追加します。 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

他のヒント

処理に長い時間がかかる場合は、別の労働者のサムネイルの処理を検討してください。

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

遅延::ジョブとリクはこれに対する素晴らしい解決策です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top