我有一个位于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模式下实现这一点?感谢。
答案 0 :(得分:1)
当你调用SomeHelper :: SomeClass时,Rails的自动加载机制会尝试在lib / some_helper / some_class.rb上加载文件
Rails不会加载lib / *中的所有内容,只会在发生ConstMissing时尝试加载文件。
答案 1 :(得分:1)
您可能需要检查开发和生产环境之间的配置设置之间的差异:
config/environments/production.rb
和config/environments/development.rb
。
在Rails初始化例程期间,调用load_plugins()
来加载config.plugin_paths
中的所有插件。您需要确保包含文件夹lib/
,例如
config.plugin_paths = [“#{RAILS_ROOT} / lib / plugins”,“#{RAILS_ROOT} / vendor / plugins”]
除了config.plugin_paths
之外,您还可以命名应在config.plugins
中加载的插件。如果该变量包含:all
,那么将加载所有插件(找到)。
(顺便说一句:配置设置等于任何一个环境都应该放在config/environment.rb
。环境之间的任何差异都是由于各个.rb
文件中的设置所致。)