2010-10-30 76 views
2

所以我覺得我很愚蠢,並且沒有檢查在production-env中運行了很長時間,現在我正在嘗試部署,我是得到這個惱人的錯誤。有任何想法嗎?Rails,production-env,「對象不缺少常量」

的lib/history_tools.rb

module HistoryTools 
    def self.included(base) 
    base.has_many :history, :dependent => :destroy 
    History::TYPES.each do |htype| 
     base.has_many "history_#{htype}", :class_name => "History::#{htype.capitalize}" 
    end 
    end 
    # ... other minor things removed ... 
end 

應用程序/模型/ user.rb

class User < InheritedResources::Base 
    include HistoryTools 
end 

到config/environment.rb

# ... the usual stuff, then, at the very bottom: 
require 'history_tools' 

這給了錯誤:

activesupport-2.3.8/lib/active_support/dependencies.rb:417:in 
`load_missing_constant':ArgumentError: Object is not missing 
constant HistoryTools! 

如果我在user.rb的頂部添加額外的require 'history_tools',它修復錯誤,我相信,但隨後未能在#{RAILS_ROOT}/lib尋找其他的事情,都必須在environment.rb中以相同的方式。

踢球者:這在發展模式下完美運作。它僅在生產中出現此錯誤。我的大部分搜索似乎都暗示「不缺少常量」的錯誤與Rails自動加載文件的方式有關,當沒有任何內容被卸載時,這些文件應該在生產中消失。這似乎與此行爲相反?

+0

如果您使用的是捆綁包...我遇到了同樣的問題,並通過在rsm-rails的Gemfile中添加「:require => false」來解決此問題。 – user694971 2011-08-31 15:32:41

回答

0

你不應該在environment.rb中有require'history_tools'。在該版本的Rails中,應該自動加載lib文件夾中的所有文件。

2

我不能說,如果這是一個錯字或真正的代碼,但是:

class User < InheritedResources::Base 
    include HistoryTools 
end 

大概應該是

class User < ActiveRecord::Base 
    include HistoryTools 
end 

InheritedResources應該用於控制器,而不是模型。

+0

你當然是對的。最近我一直在寫太多的控制器,然後輸入那個習慣...... *嘆氣* – pdkl95 2010-10-31 01:03:41

0

好吧,在經過了很多小時的挖掘之後,它似乎根本就沒有涉及到這個東西。這是一個錯誤,大約三個類的樹下,這是失敗的另一個奇怪的原因,並且例外顯然被軌道內部的某處抓住,而忽略。

這並不能解釋爲什麼它在開發模式下工作,但不幸的是,至少我所有的東西現在都能正常工作。不管怎麼說,還是要謝謝你!

+3

它可能在開發模式下工作,因爲你沒有訪問那個有錯誤的類。當您以生產模式啓動服務器時,它會預加載所有類,以使錯誤變得更加明顯。 – rwilliams 2010-10-31 02:01:08

3

當我得到這個錯誤時,這是​​因爲錯誤中提到的類/模塊內部的內部類/模塊存在錯誤。