Rails – 为什么RAILS_ROOT / lib中的模型在生产模式下不可用?
我有一个位于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模式下实现这一点? 谢谢。
当您调用SomeHelper :: SomeClass时,Rails的自动加载机制将尝试在lib / some_helper / some_class.rb上加载文件
Rails不会加载lib / *中的所有内容,它只会在发生ConstMissing时尝试加载文件。
您可能需要检查开发和生产环境之间的配置设置之间的差异: 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
。 config/environment.rb
之间的任何差异都是由于各个.rb
文件中的设置所致。)