web-dev-qa-db-ja.com

Carrierwave、MiniMagick-NoMethodError:nil:NilClassの未定義のメソッド `size '

ステージングで、carrierwaveおよびminimagickを介してイメージをアップロードおよびサイズ変更するときに、次のエラーに直面します。ローカルではすべてが正常に動作します。

carrierwave(0.9.0)mini_magick(3.7.0)

irb(main):003:0> PicturePost.create(remote_content_url: 'http://www.imagpress.com/img/slider/slider_1.jpg')
NoMethodError: undefined method `size' for nil:NilClass
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick.rb:24:in `choose_processor'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick.rb:64:in `mogrify?'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:360:in `run_command'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:171:in `valid?'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:140:in `create'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:48:in `read'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:111:in `block in open'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:110:in `open'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:110:in `open'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/processing/mini_magick.rb:260:in `manipulate!'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/processing/mini_magick.rb:176:in `resize_to_fill'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/processing.rb:85:in `block in process!'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/processing.rb:81:in `each'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/processing.rb:81:in `process!'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/callbacks.rb:18:in `block in with_callbacks'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/callbacks.rb:18:in `each'
9 levels...
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/download.rb:65:in `download!'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:353:in `remote_url='
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:203:in `remote_content_url='
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/orm/activerecord.rb:44:in `remote_content_url='
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/attribute_assignment.rb:85:in `block in assign_attributes'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/attribute_assignment.rb:78:in `each'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/attribute_assignment.rb:78:in `assign_attributes'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/base.rb:498:in `initialize'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/persistence.rb:44:in `new'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/persistence.rb:44:in `create'
from (irb):3
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/railties-3.2.15/lib/Rails/commands/console.rb:47:in `start'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/railties-3.2.15/lib/Rails/commands/console.rb:8:in `start'
from /home/deploy/apps/staging/blog/shared/bundle/Ruby/1.9.1/gems/railties-3.2.15/lib/Rails/commands.rb:41:in `<top (required)>'
from script/Rails:6:in `require'

なぜこれが起こっているのか理解できません。

34
rdsoze

新しいサーバーにimagemagickをインストールするのを忘れていました。これで問題が解決しました

Sudo apt-get install imagemagick
54
rdsoze

このエラーは、MiniMagickがコマンドmogrifyまたはgmを検索し、どちらかを見つけられなかった場合に発生します。

別の回答で述べたように、ImageMagickまたはGraphicsMagickが次のようなコマンドでインストールされていることを確認する必要があります

Sudo apt-get install imagemagick

ただし、この問題は、ImageMagickが標準以外の場所にインストールされていて、Railsプロセスのパスで利用できない場合に発生します。たとえば、ソースから/usr/local/bin、その場所がパス上にない可能性があります。この場合、パスが正しく設定されていることを確認するには、この行をapplication.rbenvironments/production.rb、またはその他の適切な場所に追加します。

ENV['PATH'] += File::PATH_SEPARATOR + '/usr/local/bin'

アプリケーションの起動方法によっては、パスが異なる場合があることに注意してください。コマンドラインとシステムのinitファイルのどちらからでも、このような行を追加することは、MiniMagickがすべての状況で正しく機能することを保証するために重要です。

Linuxでは、実行中のRailsプロセスのパスを調べるには、pidを見つけて/proc/<pid>/environを調べます。

6
pdg137

Homebrew&Yosemite-centric Answer:

http://thornelabs.net/2014/12/08/libpng-not-symlinking-when-installing-imagemagick-on-os-x-yosemite.html

もちろん、ImageMagickを再インストールする必要がありますが、実行している場合

brew install imagemagick

次のようなエラーが表示されます:

Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink share/man/man5/png.5
/usr/local/share/man/man5 is not writable.
...

まず、ユーザー名に次の権限があることを確認します

ls -al /usr/local/share/man

そうでない場合は、実行する必要があります

Sudo chown -R yourusername /usr/local/share/man/man5
brew link libpng

これが誰かを数時間節約することを願っています。

-B

2
user1870776

Mini_magick 3.7.0の問題のようです。これを見てください issue

2
usha

Yumパッケージマネージャーを使用している場合(私はAWS Opsworks用です)。できるよ

yum install ImageMagick

注:キャメルケースのスペルのImageMagick

1

Railsを使用し、代わりにmini_magickを使用している他の人は、gemfileでバージョンを3.5に変更してください。3.6はmini_magickでの画像アップロードで壊れており、バージョン3.7では機能しません。

0
iamryandrake

IDE=を使用している場合、おそらくIDEを再起動するだけで問題を解決できます。私はこの問題の解決策を見つけるのに非常に多くの時間を費やしています。そして、この簡単な操作でうまくいきました。

0