5

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

4

2 回答 2

1

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

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

于 2010-05-24T14:21:31.567 回答
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文件中的设置造成的。)

于 2010-05-24T21:45:54.473 回答