2013-07-12 40 views
-1

我升级了我的应用程序从红宝石1.9.3到红宝石2.0,保持我的大部分宝石没有升级。 一切工作正常,但是当我尝试上传的图像,我得到这个错误:Carrierwave/RMagick NoMethodError升级到红宝石2.0后

NoMethodError - undefined method `[]=' for nil:NilClass: 
    app/uploaders/image_uploader.rb:91:in `block in optimize' 
    /home/stefpe/.rvm/gems/[email protected]/bundler/gems/carrierwave-5ee108128b40/lib/carrierwave/processing/rmagick.rb:263:in `manipulate!' 
    app/uploaders/image_uploader.rb:90:in `optimize' 
    /home/stefpe/.rvm/gems/[email protected]/bundler/gems/carrierwave-5ee108128b40/lib/carrierwave/uploader/processing.rb:85:in `block in process!' 
    /home/stefpe/.rvm/gems/[email protected]/bundler/gems/carrierwave-5ee108128b40/lib/carrierwave/uploader/processing.rb:81:in `each' 
    /home/stefpe/.rvm/gems/[email protected]/bundler/gems/carrierwave-5ee108128b40/lib/carrierwave/uploader/processing.rb:81:in `process!' 
    /home/stefpe/.rvm/gems/[email protected]/bundler/gems/carrierwave-5ee108128b40/lib/carrierwave/uploader/callbacks.rb:18:in `block in with_callbacks' 
    /home/stefpe/.rvm/gems/[email protected]/bundler/gems/carrierwave-5ee108128b40/lib/carrierwave/uploader/callbacks.rb:18:in `each' 
    /home/stefpe/.rvm/gems/[email protected]/bundler/gems/carrierwave-5ee108128b40/lib/carrierwave/uploader/callbacks.rb:18:in `with_callbacks' 

的image_uploader.rb基于/carrierwave/processing/rmagick.rb例如manipulate功能:

def optimize 
    manipulate! do |img, index, options| 
     options[:write] = { 
    :quality => 50, 
    :depth => 8, 
    :interlace => "Magick::PlaneInterlace" 
     } 
     img.strip! 
    end 
    end 

配置: 服务器:Heroku的,本地开发:Linux的

红宝石1.9.3 - > 2.0

个轨3.2.13

carrierwave 0.6.2

rmagick 2.13.1

雾1.3.1

任何想法,为什么会出现与红宝石2.0.0不兼容?

预先感谢您!

+0

你会很好,包括91行的摘录,因为错误味精说: –

回答

0

你应该尝试更新一些宝石,carrierwave可能没有在四月已与红宝石2完全兼容2012

进一步激励:Carrierwave didn't甚至传递选项加入到传递给manipulate!块直到0.7

0

对我来说有效的是在操作结束时返回图像! 在你的情况:

def optimize 
    manipulate! do |img, index, options| 
    options[:write] = { 
     :quality => 50, 
     :depth => 8, 
     :interlace => "Magick::PlaneInterlace" 
    } 
    img.strip! 
    img 
    end 
end