Ruby on rails Rails-为什么Rails\u ROOT/lib中的模型在生产模式下不可用?

Ruby on rails Rails-为什么Rails\u ROOT/lib中的模型在生产模式下不可用?,ruby-on-rails,production-environment,Ruby On Rails,Production Environment,我在RAILS_ROOT/lib文件夹中有一个类,我在我的一个助手中使用它,它在开发中非常有用 当我切换到生产环境时,应用程序抛出一个名称错误(未初始化的常量SomeHelper::SomeClass),我必须在helper中手动加载它: load "#{Rails.root}/lib/some_class.rb" module SomeHelper def some_method sc = SomeClass.new # blah end end 我的印象是RAIL

我在RAILS_ROOT/lib文件夹中有一个类,我在我的一个助手中使用它,它在开发中非常有用

当我切换到生产环境时,应用程序抛出一个
名称错误(未初始化的常量SomeHelper::SomeClass)
,我必须在helper中手动加载它:

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\u helper/some\u class.rb加载文件


Rails不会加载lib/*中的所有内容,它只会在ConstMissing发生时尝试加载文件。

您可能需要检查开发环境和生产环境之间配置设置的差异:
config/environments/production.rb
config/environments/development.rb

在Rails初始化例程中,调用加载插件(),加载
config.plugin\u路径中的所有插件。您需要确保包含文件夹
lib/
,如中所示

config.plugin_path=[“#{RAILS_ROOT}/lib/plugins”,“#{RAILS_ROOT}/vendor/plugins”]

除了
config.plugins\u路径
,您还可以命名应在
config.plugins
中加载的插件。如果该变量包含
:all
,则将加载所有插件(找到的)

(顺便说一句:与任一环境相同的配置设置应该放在
config/environment.rb
中。环境之间的任何差异都是由于相应的
.rb
文件中的设置造成的。)