LoginSignup
4
3

More than 5 years have passed since last update.

CarrierWave+MiniMagickでFloatDomainError: Infinity

Posted at

carrierwave (0.10.0)
mini_magick (3.8.1)

メモ書きです。
根っこが深くて大変でした。

FloatDomainError: Infinity が発生している理由

FloatDomainError: Infinity #1378
https://github.com/carrierwaveuploader/carrierwave/issues/1378

該当箇所
https://github.com/carrierwaveuploader/carrierwave/blob/master/lib/carrierwave/processing/mini_magick.rb#L177-197

画像の大きさが0のときに飛んじゃいます。
だけど、問題になったのは、画像が十分な大きさ(縦横)を持っている時に発生したからです。

このissueでは、もっと説明的な例外を投げるべきだ!とおっしゃっています。その通りですね笑

::MiniMagick::Image

CarrierWaveでは::MiniMagick::Imageを通してImageMagickのコマンドを実行しているので、手打ちしてみるとこんな感じです。

image = ::MiniMagick::Image.new(current_path)
=> #<MiniMagick::Image:0x007fecdf008240
 @path=
  "/hogehoge/r100_9758679aaa3927799fb84f90740f0cb2e91f61a4c287e69bf949a7b65e7e1b7a.png",
 @tempfile=nil>

image[:dimensions]
=> [0, 0, 0, 1, 0, 0, 0, 0, 0, 0]

情報が全くとれていません。

直打ちでidentifyすると、

identify /hogehoge/r100_9758679aaa3927799fb84f90740f0cb2e91f61a4c287e69bf949a7b65e7e1b7a.png

/hogehoge/r100_9758679aaa3927799fb84f90740f0cb2e91f61a4c287e69bf949a7b65e7e1b7a.png PNG 1436x320 1436x320+0+0 8-bit sRGB 543KB 0.000u 0:00.000

ちゃんとでますね。

さて、デバッガーで実行時のコンテキストから::MiniMagick::Imagerun_commandを実行すると...

run_command( 'identify', '-format', MiniMagick::Utilities.windows? ? '"%w %h\n"' : '%w %h\n', path)
=> "sh: rvm_debug: line 1: syntax error: unexpected end of file\nsh: error importing function definition for `rvm_debug'\n1436 320\n"

RVMおまえか!!!!

コードの通りメソッドチェーンを実行すると確かに例の不思議な配列に。

run_command( 'identify', '-format', MiniMagick::Utilities.windows? ? '"%w %h\n"' : '%w %h\n', path).split("\n")[0].split.map { |v| v.to_i }
=> [0, 0, 0, 1, 0, 0, 0, 0, 0, 0]

いやこれ、このコードもひどいっしょ...

RVMがなぜこーなったかについては深堀りできていないんだけど、Shellshock関係あり?

ShellShock update issue temporarily affecting Slurm jobs and software modules
https://rc.fas.harvard.edu/shellshock-update-issue-temporarily-affecting-slurm-jobs-software-modules/

bashのパッチによって関数定義がどう変わるか、どうRVMに対して影響があるかは勉強してないので分かりません。

解決策

たまたま、MiniMagickが大幅リファクタリングをしていたみたいで、mini_magick4.0.0rcでなおりました。
identifyの実行後の解析が悪いっちゃ悪いからね。

これまたもしbashが原因だったとしたら、そのバージョンによって挙動変わるんでもう大変ですよ...

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3