2010-05-20 59 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文件中的设置。)

相关问题