Подтвердить что ты не робот

Carrierwave, MiniMagick - NoMethodError: undefined метод `size 'для nil: NilClass

В процессе постановки на экран я сталкиваюсь со следующей ошибкой при загрузке и изменении размера изображения с помощью несущей и минимизации. На местном все работает нормально.

несущая волна (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'

Не могу понять, почему это происходит.

4b9b3361

Ответ 1

Забыл установить imagemagick на моем новом сервере. Это решило проблему для меня

sudo apt-get install imagemagick

Ответ 2

Эта ошибка возникает, когда MiniMagick ищет команды mogrify или gm и не может найти ни одного.

Как уже упоминалось в другом ответе, вы должны убедиться, что ImageMagick или GraphicsMagick установлены с помощью команды, например

sudo apt-get install imagemagick

Однако эта проблема также может возникнуть, если ImageMagick установлен в нестандартном местоположении и недоступен на пути процесса Rails. Например, если вы установите из источника в /usr/local/bin, это местоположение может не находиться на пути. В этом случае, чтобы убедиться, что ваш путь настроен правильно, добавьте эту строку в application.rb, environments/production.rb или в другое подходящее место:

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

Обратите внимание, что ваш путь может отличаться в зависимости от того, как приложение запускается, например. из командной строки или из файла инициализации системы, поэтому добавление такой строки важно, чтобы гарантировать, что MiniMagick будет работать правильно при любых обстоятельствах.

В Linux вы можете проверить путь к запущенному Rails-процессу, найдя pid, а затем взглянув на /proc/<pid>/environ.

Ответ 3

Похож на проблему с mini_magick 3.7.0. Посмотрите на это issue

Ответ 4

Homebrew и Yosemite-centric Ответ:

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

Ответ 5

Если вы используете диспетчер пакетов yum (например, я для AWS Opsworks). Вы можете сделать

yum install ImageMagick

Примечание: ImageMagick записано как camelcase

Ответ 6

Если вы используете некоторую среду IDE, проблема может быть решена только путем перезапуска IDE. Я трачу столько времени, пытаясь найти решение этой проблемы. И эта простая операция работала для меня.

Ответ 7

Для других людей, которые используют Rails и вместо этого используют mini_magick, измените версию на 3.5 в вашем gemfile, так как 3.6 для загрузки изображения с помощью mini_magick и просто не работает с версией 3.7.