9

MiniMagick を使用して、マルチパート フォームからアップロードされた画像のサイズ変更を実行しています。最初にアップロードされたファイルからいくつかの異なる種類の画像を生成する必要があります。画像処理を実行しているコードは次のとおりです。

// Generates a thumbnail image
mm = MiniMagick::Image.open(Rails.root.join('public', 'uploads', new_url))
mm.resize(thumbnail_dimensions.join("x"))
mm.write(Rails.root.join('public', 'uploads', "t_"+new_url))

// Generates cropped version
mm_copy = MiniMagick::Image.open(Rails.root.join('public', 'uploads', new_url))
mm_copy.crop('200x200')
mm_copy.write(Rails.root.join('public', 'uploads', "c_"+new_url))

new_urlpublicフォルダ内の画像へのパスです。サムネイル ルーチンは完全に機能します。アプリがトリミングされたバージョンの処理を開始すると、そこから問題が発生し始め、私の人生でそれを理解することはできません. このコードから次のエラーが表示されます。

No such file or directory - /tmp/mini_magick20110627-10055-2dimyl-0.jpg

Rails のガベージ コレクターで発生する可能性のある競合状態についていくつか読みましたが、問題を解決できませんでした。コンソールからもこれを試してみましたが、MiniMagick インスタンスを作成できますが、そこでもNo such fileエラーが発生します。現時点では、どこに行けばいいのかわからないので、ここの誰かが役立つ提案をしてくれることを願っています. ご協力いただきありがとうございます!

詳細

  • OS: Ubuntu (Lucid Lynx)
  • レールのバージョン: 3.0.7
  • ルビーのバージョン: 1.8.7
  • ミニマジック バージョン: 3.3
4

2 に答える 2

7

ImageMagickをインストールしましたか?そうでない場合は、を試しsudo apt-get install ImageMagickてから、webrickサーバーを再起動してください

于 2012-06-21T05:54:55.110 に答える
3

ここで言及されているのはおそらく競合状態です。

https://ar-code.lighthouseapp.com/projects/35/tickets/6-race-condition-with-temp_file

ここに1つの修正があります:

http://rubyforge.org/tracker/index.php?func=detail&aid=9417&group_id=1358&aid=5365

あるいは、おそらくもっと簡単に、これを試すことができます:

// Generates a thumbnail image
mm = MiniMagick::Image.open(Rails.root.join('public', 'uploads', new_url))
mm_copy = mm.clone   # clone the opened Image, instead of re-opening it

mm.resize(thumbnail_dimensions.join("x"))
mm.write(Rails.root.join('public', 'uploads', "t_"+new_url))

// Generates cropped version
mm_copy.crop('200x200')
mm_copy.write(Rails.root.join('public', 'uploads', "c_"+new_url))
于 2011-10-31T16:46:23.790 に答える