2013-07-12 2 views
-1

Я обновил свое приложение с ruby ​​1.9.3 до ruby ​​2.0, сохраняя большинство моих драгоценных камней без обновления. Все работало отлично, но когда я пытался загрузить изображение, я получил эту ошибку:Carrierwave/RMagick NoMethodError после обновления до ruby ​​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, локальная Dev: линукс

рубин 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