【问题标题】:Rails3 MiniMagick load error on choose_processor选择处理器上的 Rails3 MiniMagick 加载错误
【发布时间】:2014-01-01 15:49:38
【问题描述】:

rails 3.2.13 应用程序同时在本地主机和服务器上运行(处于开发模式)。在 localhost 中,应用程序通过carrierwave和MiniMagick正确加载图像。

在服务器上,引发错误

undefined method `size' for nil:NilClass

,全栈领先如下:

mini_magick (3.7.0) lib/mini_magick.rb:24:in `choose_processor'
mini_magick (3.7.0) lib/mini_magick.rb:64:in `mogrify?'
mini_magick (3.7.0) lib/mini_magick/image.rb:360:in `run_command'
mini_magick (3.7.0) lib/mini_magick/image.rb:171:in `valid?'
mini_magick (3.7.0) lib/mini_magick/image.rb:140:in `create'
mini_magick (3.7.0) lib/mini_magick/image.rb:48:in `read'
mini_magick (3.7.0) lib/mini_magick/image.rb:111:in `block in open'
mini_magick (3.7.0) lib/mini_magick/image.rb:110:in `open'
mini_magick (3.7.0) lib/mini_magick/image.rb:110:in `open'
carrierwave (0.9.0) lib/carrierwave/processing/mini_magick.rb:260:in `manipulate!'

其他帖子暗示它可能是
a miniMagick version issue。但是 localhost 的版本和服务器的一样,carrierwave、rails、OSX...

根据模块文档,似乎没有拾取处理器。因此,安装可能出错了。

编辑此问题是因为手头可能存在两个问题:不同版本的 MiniMagick 会产生不同的行为。这两个问题现在都是单独的问题。

【问题讨论】:

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


    【解决方案1】:

    将您的身份、转换和其他链接到 /usr/local/bin(或 /usr/bin),它会起作用。

    $ which identify
    /whatever/identify
    
    $ sudo ln -s /whatever/identify /usr/local/bin
    
    $ which identify
    /usr/local/bin/identify
    

    你需要安装:

    gem 'mini_magick', '~> 3.5.0'
    

    【讨论】:

    • 不幸的是我已经在那里了。 $ which identify /usr/local/bin/identify 我有一段时间认为我有一个符号链接问题(我仍然认为这是有效的,因为我需要一个持久的上传文件夹)并在此期间解决了这个问题。该符号链接文件夹现在显示一个 tmp 目录,但仍然收到“没有这样的文件或目录”错误。那么 MiniMagick 是否针对不同的领域?
    • FWIW,gem 3.6 版出现无文件或目录错误。我安装了 3.7 并运行了 which identify,它指向 /usr/local/bin/identify。但是生成的错误最初是:nil:NilClass 的未定义方法“大小”。不知道现在要打败哪条路……
    • 哦,那你需要安装gem 'mini_magick', '~> 3.5.0',正如他们在github上讨论的那样
    • 不幸的是,这会导致同样的“没有这样的文件或目录”错误。为什么它在本地运行而不是在远程服务器上运行很难解释。一个要素可能是乘客部署。另一个显然是“MiniMagick 使用临时文件,但不保留对它们的引用。这意味着当 GarbageCollector 运行时它们会被自动删除”。但为什么它在本地而不是远程?
    • 临时文件引用未被保留的观察是旧的(2007 年)。我想知道它今天是否仍然有效。但这是有道理的,本地加载时间微不足道,而我与网络的连接也是如此;对于一个 800kb 的文件,失败可能有它的解释。是否有保留参考的超时数字?有什么办法可以解决这个问题?
    【解决方案2】:

    问题在于Passenger v3,以及它在Apache 启动时的行为方式。 (乘客 4 显然没有这个问题)

    解决方案在任何情况下都与this proposal 相同,方法是编辑开发结束和/或生产环境文件:

      ENV['PATH'] = "/usr/local/bin:#{ENV['PATH']}"
    

    【讨论】:

      猜你喜欢
      • 2019-04-18
      • 1970-01-01
      • 2021-07-18
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多