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