1

我有一個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'似乎已使其工作。

我並不認爲這是回答,因爲我懷疑它可能會在下一次部署時再次停止,但它可能會縮小問題的範圍。

回答

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)'。 –

相關問題