瞭解軌道緩存如何工作的人可以真正幫助我在這裏。下面的代碼,嵌套了Rails :: Initializer.run塊內:在environment.rb中設置的常量在開發模式下消失
config.after_initialize do
SomeClass.const_set 'SOME_CONST', 'SOME_VAL'
end
現在,如果我跑script/server
和提出請求,一切都是花花公子。但是,在對Rails應用程序的第二次請求中,所有內容都發生了單調的常量錯誤。在生產模式下,我可以成功完成第二個請求,這意味着常數仍然存在。
我已經改變上述固定的問題:
config.after_initialize do
require 'some_class' # in RAILS_ROOT/lib/some_class.rb
SomeClass.const_set 'SOME_CONST', 'SOME_VAL'
end
但現在,這意味着每當我做出改變some_class.rb,我一定要重新啓動服務器。有沒有什麼辦法可以在環境文件中設置常量並讓它們在開發模式下正常工作?爲什麼第一個請求中存在常量,而不是以下請求?
UPDATE:由於environment.rb文件是隻讀的,當Rails應用程序被啓動,我想我的兩個LIB文件和模型對每個請求重新加載,我被迫常數遷入some_class.rb文件如下所示:
if Rails.env.development?
const_set 'SOME_CONST', 'SOME_DEVELOPMENT_VAL'
end
而在environments/production.rb中,我有舊的const_set代碼。
更新:使用config.to_prepare更好的方法詳述如下。
謝謝,這就是我正在尋找的答案。 – joshuaxls 2009-04-14 05:53:32