Rails - 为什么RAILS_ROOT / lib中的模型在生产模式下不可用?

时间:2010-05-20 09:26:54

标签: ruby-on-rails production-environment

我有一个位于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模式下实现这一点?感谢。

2 个答案:

答案 0 :(得分:1)

当你调用SomeHelper :: SomeClass时,Rails的自动加载机制会尝试在lib / some_helper / some_class.rb上加载文件

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

答案 1 :(得分:1)

您可能需要检查开发和生产环境之间的配置设置之间的差异: 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.rb。环境之间的任何差异都是由于各个.rb文件中的设置所致。)