【问题标题】:Rails 4 : uninitialized constant upon app initialize - lib loading issue in staging environmentRails 4:应用程序初始化时未初始化的常量 - 暂存环境中的库加载问题
【发布时间】:2015-01-27 05:25:56
【问题描述】:

我在暂存环境中运行 rake db:setup

bundle exec rake db:setup RAILS_ENV=staging

我的配置/环境/staging.rb

Rails.application.configure do
    ..
    config.eager_load = true
    ..
end

我在应用初始化期间收到此错误:

: uninitialized constant ApplicationHelper::MyModule
 ../my_test/app/helpers/application_helper.rb:4:in `<module:ApplicationHelper>'

/app/helpers/application_helper.rb

module ApplicationHelper
  include MyModule::Ditto::Base
  include MyModule::Ditto::MyHelper
  ..
end

lib 文件是:

/lib/misc/my_module/ditto/base.rb
module MyModule
    module Ditto
        module Base
        …
        end
    end
end

/lib/misc/my_module/ditto/my_helper.rb
module MyModule
    module Ditto
        module SliderHelpers
        …
        end
   end
end

我猜 lib 中的模块没有自动加载..(一切都在开发环境中运行良好,因为所有 lib 'require' 都是硬编码的.. 我应该添加什么让它在 staging/prod 环境中运行?

感谢您的光...

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    config.autoload_paths += %W(#{config.root}/lib) 添加到config/application.rb

    【讨论】:

    • 默认情况下lib文件夹在Rails.root目录中,不在app/中。
    • 感谢 Andrey .. 由于我的 lib 结构更复杂,我决定在初始化程序中要求模块 .. 然而这很奇怪,数组并不总是相同的顺序,有时是 Base 模块不会首先导致未初始化的常量 BaseView ... Dir["#{Rails.root}/lib/calendars/lib/*.rb"].each { |file|需要文件} BaseView 是第一类,其他是子类...有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多