我有一個Rails應用程序,使用Ruby 1.9.3和Rails 3.2.13在Mac OS X本地完美地工作。這已經部署到我的Ubuntu虛擬服務器(nginx /獨角獸)使用Capistrano,並一直工作正常。未初始化的常量CarrierWave將Rails應用程序部署到服務器與Capistrano
當我用RMagick安裝CarrierWave gem時,問題出現了。這些被添加到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)
這些文件在我的git倉庫,並在服務器上是相同的。這似乎足以讓我的本地運行應用程序找到CarrierWave,而不是服務器版本。
Capistrano運行bundle:在部署時安裝並重新啓動服務器,但我嘗試了兩種方式手動執行,而且沒有任何更改。
我在網上看到過一些類似的問題,但沒有一個解決方案似乎與此有關 - 有人說它與CarrierWave沒有關係,但並沒有說它與它有什麼關係。
任何人都可以給我任何指針,而我cap deploy:rollback
了嗎?
謝謝。
最新更新:
我有應用程序啓動並在服務器上運行。儘管require 'carrierwave'
在application.rb文件中不起作用,以部署用戶身份登錄到服務器,導航到應用程序目錄,使用RAILS_ENV=production bundle exec rails c
打開rails控制檯,然後鍵入require 'carrierwave'
似乎已使其工作。
我並不認爲這是回答,因爲我懷疑它可能會在下一次部署時再次停止,但它可能會縮小問題的範圍。
謝謝,但我恐怕這不起作用。交換寶石的順序根本沒有任何區別。將需求行添加到application.rb當然確實有所作爲,但僅限於顯示的錯誤消息。現在我得到'/home/deployer/apps/panto/releases/20130628140515/config/application.rb:5:in'require':無法加載這樣的文件 - carrierwave(LoadError)'。 –