2010-05-20 66 views
5

我有一個類位於RAILS_ROOT/lib文件夾內,我在其中一個助手中使用了它,它在開發中非常有用。Rails - 爲什麼RAILS_ROOT/lib中的模型在生產模式下不可用?

當我切換到生產中,應用程序會引發NameError (uninitialized constant SomeHelper::SomeClass),我不得不在助手手動加載:

load "#{Rails.root}/lib/some_class.rb" 

module SomeHelper 
    def some_method 
    sc = SomeClass.new 
    # blah 
    end 
end 

我的印象是,這裏的一切都RAILS_ROOT/lib目錄/ *應可所有的應用程序 - 有什麼我需要配置,使這種情況發生在prod模式?謝謝。

回答

1

當你調用SomeHelper :: SomeClass的,Rails的自動加載機制將嘗試LIB加載文件/ some_helper/some_class.rb

Rails會不會加載在所有的lib/*,它只會嘗試加載文件發生ConstMissing時。

1

您可能需要檢查開發和生產環境之間配置設置之間的差異: config/environments/production.rbconfig/environments/development.rb

在Rails初始化例程中,load_plugins()被調用,它加載所有插件在config.plugin_paths。你需要確保你的文件夾lib/包括,就像在

config.plugin_paths = 「#{RAILS_ROOT}/lib目錄/插件」, 「#{RAILS_ROOT} /供應商/插件」]

除了config.plugin_paths,您還可以命名應在config.plugins中加載的插件。如果該變量包含:all那麼所有插件(找到)將被加載。

(順便說一句:配置設置等於或者環境應該config/environment.rb去enviroments之間的任何差異是由於在各自.rb文件中的設置。)

相關問題