2013-12-09 3 views
34

При постановке на экран я сталкиваюсь со следующей ошибкой при загрузке и изменении размера изображения с помощью несущей и минимального значения. На местном все работает отлично.Carrierwave, MiniMagick - NoMethodError: undefined method `size 'for nil: NilClass

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' 

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

ответ

53

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

sudo apt-get install imagemagick 
+1

спасибо, это просто решить мою проблему: D –

+1

Большое спасибо за это! – YoniGeek

+1

Вы, наверное, только что спасли мне часы! Спасибо, что ответили на ваш вопрос, +1 –

2

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

1

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

yum install ImageMagick 

примечания: ImageMagick произносится как CamelCase

6

Эта ошибка возникает, когда 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.

0

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

+0

Это может быть странная проблема в среде разработки, но он сказал, что проблема возникает только при постановке, а не в девеклапии. Вероятно, на этапе он использует 'nano',' vim' или другой редактор кода, но не IDE. – markets

0

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

+0

Ухудшение рейтинга до 3.5: Errno :: ENOENT - Нет такого файла или каталога - укажите –

2

Homebrew & Йосемити-ориентированный Ответ:

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

Смежные вопросы