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.rbconfig/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.rbconfig/environment.rb之间的任何差异都是由于各个.rb文件中的设置所致。)