Had forgotten to install imagemagick on my new server. This solved the issue for me
sudo apt-get install imagemagick
Question
On staging, I'm facing the following error on uploading and resizing an image through carrierwave and minimagick. On local everything works fine.
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'
Can't figure out why this is happening.
Solution
Had forgotten to install imagemagick on my new server. This solved the issue for me
sudo apt-get install imagemagick
OTHER TIPS
This error occurs when MiniMagick looks for the commands mogrify
or gm
and fails to find either one.
As mentioned in another answer, you need to make sure that ImageMagick or GraphicsMagick is installed with a command such as
sudo apt-get install imagemagick
However, this problem can also occur if ImageMagick is installed in a non-standard location and is not available on the path of the Rails process. For example, if you install from source into /usr/local/bin
, that location might not be on the path. In this case, to ensure that your path is set up correctly, add this line to application.rb
, environments/production.rb
, or some other appropriate place:
ENV['PATH'] += File::PATH_SEPARATOR + '/usr/local/bin'
Note that your path might be different depending on how the application is started, e.g. from the command line vs. from a system init file, so adding a line like this is important to ensure that MiniMagick will work correctly under all circumstances.
Under Linux, you can inspect the path of a running Rails process by finding the pid and then looking at /proc/<pid>/environ
.
Looks like its a problem with mini_magick 3.7.0. Have a look at this issue
Homebrew & Yosemite-centric Answer:
Sure, you'll need to reinstall ImageMagick, but if running
brew install imagemagick
Gives you an error like:
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.
...
First, check that your username has permission with
ls -al /usr/local/share/man
if you don't, you'll need to run
sudo chown -R yourusername /usr/local/share/man/man5
brew link libpng
Hope this saves someone some hours.
-B
If you are using the yum package manager (like I am for AWS Opsworks). You can do
yum install ImageMagick
note: ImageMagick spelt as camelcase
If you use some IDE probably the problem can solved just by restarting of IDE. I spend so much time trying to find solution for this problem. And this simple operation worked for me.
For other people who are using Rails and using mini_magick instead, change the version to 3.5 in your gemfile, as 3.6 is broken for image upload with mini_magick and simply doesn't work with version 3.7.