1

У меня есть приложение Rails, которое отлично работает локально в Mac OS X с использованием Ruby 1.9.3 и Rails 3.2.13. Это было развернуто на моем виртуальном сервере Ubuntu (nginx/unicorn) с помощью Capistrano и работает нормально.«неинициализированная константа CarrierWave» при развертывании приложения Rails для сервера с Capistrano

Проблема возникла, когда я установил драгоценный камень CarrierWave с RMagick. Они были добавлены в gemfile и отлично работали локально, но при развертывании на сервере я получаю 500 ошибок каждый раз.

Краткая выписка из unicorn.log на сервере:

E, [2013-06-28T12:04:05.937845 #2758] ERROR -- : reaped #<Process::Status: pid 23786 exit 1> worker=0 
I, [2013-06-28T12:04:05.939517 #2758] INFO -- : worker=0 spawning... 
I, [2013-06-28T12:04:05.968225 #23793] INFO -- : worker=0 spawned pid=23793 
I, [2013-06-28T12:04:05.969959 #23793] INFO -- : Refreshing Gem list 
E, [2013-06-28T12:04:59.669504 #23793] ERROR -- : uninitialized constant CarrierWave (NameError) 
/home/deployer/apps/panto/releases/20130628115346/app/uploaders/image_uploader.rb:3:in `<top (required)>' 
/home/deployer/apps/panto/releases/20130628115346/app/models/picture.rb:4:in `<class:Picture>' 
/home/deployer/apps/panto/releases/20130628115346/app/models/picture.rb:1:in `<top (required)>' 

файл упоминается в «неинициализированной постоянной» ошибке моего CarrierWave загрузчик класс, созданный собственный генератор CarrierWave, которая начинается:

# encoding: utf-8 

class ImageUploader < CarrierWave::Uploader::Base 

    # Include RMagick or MiniMagick support: 
    include CarrierWave::RMagick 
    # include CarrierWave::MiniMagick 

    # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility: 
    include Sprockets::Helpers::RailsHelper 
    include Sprockets::Helpers::IsolatedHelper 

Таким образом, ошибка связана с наследованием основного класса CarrierWave.

Выписка из Gemfile:

gem 'jquery-rails' 
gem 'simple_form' 
gem 'country_select' 
gem 'carrierwave' 
gem 'rmagick' 

И от Gemfile.lock:

carrierwave (0.8.0) 
    activemodel (>= 3.2.0) 
    activesupport (>= 3.2.0) 
... 
rmagick (2.13.2) 

Эти файлы идентичны в моем хранилище мерзавца и на сервере. Мне кажется, этого достаточно, чтобы мое локальное приложение обнаружило CarrierWave, но не для серверной версии.

Capistrano запускает пакет: установка и перезапуск сервера при развертывании, но я пробовал делать как вручную, так и без каких-либо изменений.

Я видел несколько подобных проблем, сообщаемых в Интернете, но ни один из них не имеет решения, которое, по-видимому, относится к этому, некоторые говорят, что это не имеет никакого отношения к CarrierWave, но не говорит, к чему это имеет отношение.

Может ли кто-нибудь дать мне какие-либо указания, пожалуйста, еще раз, когда я еще cap deploy:rollback?

Спасибо.

Последнее обновление:

У меня есть приложение и работает на сервере. В то время как require 'carrierwave' не работал в файле application.rb, войдите на сервер в качестве пользователя развертывания, перейдя в каталог приложения, открыв консоль рельсов, используя RAILS_ENV=production bundle exec rails c, а затем введите require 'carrierwave', похоже, заставило его работать.

Я не отмечаю это как только что ответил, но, как я подозреваю, он может снова остановиться при следующем развертывании, но это, возможно, сужает проблему.

ответ

0

Похоже, это может быть связано с требованием заказа драгоценных камней. См. this stackoverflow question для контекста. Некоторые люди, кажется, рубить вокруг него с явным потребуем application.rb (например, this), но мы надеемся, изменяя порядок в Gemfile к:

gem 'rmagick' 
gem 'carrierwave' 

должен это исправить.

Также this может помочь с правильной установкой RMagick на вашем сервере.

+1

Спасибо, но я боюсь, что это не сработало. Перестановка порядка драгоценных камней не имела никакого значения. Добавление требуемой строки в application.rb, безусловно, имело значение, но только в отображаемом сообщении об ошибке. Теперь я получаю '/home/deployer/apps/panto/releases/20130628140515/config/application.rb:5:in 'require': не могу загрузить такой файл - carrierwave (LoadError)'. –