【问题标题】:Rails - why would a model inside RAILS_ROOT/lib not be available in production mode?Rails - 为什么 RAILS_ROOT/lib 中的模型在生产模式下不可用?
【发布时间】:2011-02-21 18:45:03
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails production-environment


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可能需要检查开发环境和生产环境之间的配置设置之间的差异: 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文件中的设置造成的。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-16
        • 2021-08-08
        • 1970-01-01
        • 2014-03-25
        • 2011-06-22
        • 2014-06-01
        • 2011-02-28
        • 1970-01-01
        相关资源
        最近更新 更多