【问题标题】:Carrierwave, MiniMagick - NoMethodError: undefined method `size' for nil:NilClassCarrierwave,MiniMagick - NoMethodError:nil:NilClass 的未定义方法“大小”
【发布时间】:2013-12-26 23:44:23
【问题描述】:

在暂存时,我在通过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'

不知道为什么会这样。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 carrierwave minimagick


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      sudo apt-get install imagemagick
      

      【讨论】:

      • 你可能只是为我节省了几个小时!感谢您回答您的问题,+1
      • 非常感谢!我喜欢stackoveflow :)
      • 这是在尝试了其他八件事之后。谢谢!
      【解决方案3】:

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

      yum install ImageMagick
      

      注意:ImageMagick 拼写为驼峰式

      【讨论】:

        【解决方案4】:

        当 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/&lt;pid&gt;/environ 来检查正在运行的 Rails 进程的路径。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 这可能是开发环境中的一个奇怪问题,但他说问题只发生在暂存,而不是开发。可能在登台时他使用nanovim 或其他代码编辑器,但不是IDE。
          【解决方案6】:

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

          【讨论】:

          • 降级到 3.5 导致:Errno::ENOENT - 没有这样的文件或目录 - 识别
          【解决方案7】:

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

          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

          【讨论】:

            猜你喜欢
            • 2014-09-04
            • 1970-01-01
            • 2014-01-30
            • 2015-01-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-24
            • 1970-01-01
            相关资源
            最近更新 更多