34

在登台时,我在通过carrierwave和minimagick上传和调整图像大小时遇到​​以下错误。在本地一切正常。

载波 (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'

无法弄清楚为什么会这样。

4

7 回答 7

54

忘记在我的新服务器上安装 imagemagick。这为我解决了这个问题

sudo apt-get install imagemagick
于 2013-12-10T03:05:16.783 回答
6

当 MiniMagick 查找命令mogrifygm找不到任何一个命令时,会发生此错误。

正如另一个答案中提到的,您需要确保使用以下命令安装 ImageMagick 或 GraphicsMagick

sudo apt-get install imagemagick

但是,如果 ImageMagick 安装在非标准位置并且在 Rails 进程的路径上不可用,也会出现此问题。例如,如果您从源安装到/usr/local/bin,则该位置可能不在路径上。在这种情况下,为确保您的路径设置正确,请将此行添加到application.rbenvironments/production.rb或其他适当的位置:

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

请注意,根据应用程序的启动方式,您的路径可能会有所不同,例如从命令行与系统初始化文件,因此添加这样的行对于确保 MiniMagick 在所有情况下都能正常工作很重要。

在 Linux 下,您可以通过查找 pid 然后查看/proc/<pid>/environ.

于 2014-03-05T19:56:50.000 回答
2

看起来它是 mini_magick 3.7.0 的问题。看看这个问题

于 2013-12-09T18:45:31.257 回答
2

自制和以优胜美地为中心的答案:

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

于 2015-10-29T22:13:52.920 回答
1

如果您使用的是 yum 包管理器(就像我使用 AWS Opsworks 一样)。你可以做

yum install ImageMagick

注意:ImageMagick 拼写为驼峰式

于 2014-01-30T04:33:22.010 回答
0

如果您使用某些 IDE,可能只需重新启动 IDE 即可解决问题。我花了很多时间试图找到解决这个问题的方法。这个简单的操作对我有用。

于 2014-03-25T20:30:00.523 回答
0

对于使用 Rails 并改用 mini_magick 的其他人,请在 gemfile 中将版本更改为 3.5,因为 3.6 无法使用 mini_magick 上传图像,并且根本不适用于 3.7 版本。

于 2014-06-27T01:30:28.433 回答