2

我的情况如下:

  • 我正在运行应用程序 X
  • X 使用宝石“核心”
  • core 用模型 A、B、C、D 扩展了 X 的模型

在开发中,这完美地工作。但是,当我跑步时

(bundle exec) rake RAILS_ENV=staging RAILS_GROUPS=assets assets:precompile

它失败了

** Execute environment
rake aborted!
uninitialized constant A

我试图通过放置 Rails.application.eager_load 来解决这个问题!在environments.rb之前Application.initialize!,但恐怕只会导致其他错误。

有没有办法在 assets:precompile 之前将引擎中的模型包含在 gem 中?我读到了一些关于要求它们一一而不是 eager_load all 的内容,但是每个系统的 gem 路径都不同。

“核心”中的engine.rb:

require 'paperclip'

module Core
  class Engine < ::Rails::Engine

    config.time_zone = 'Amsterdam'
    config.encoding = "utf-8"
    config.autoload_paths += %W(#{config.root}/lib/**)

    config.generators do |g|
      g.test_framework :rspec, :views => false, :fixture => true
      g.fixture_replacement :factory_girl, :dir => 'spec/factories'
    end

    initializer "core.load_app_instance_data" do |app|
      Core.setup do |config|
        config.app_root = app.root
      end
      app.class.configure do 
        #Pull in all the migrations from Commons to the application
        config.paths['db/migrate'] += Core::Engine.paths['db/migrate'].existent
      end
    end

    initializer "core.load_static_assets" do |app|
      app.middleware.use ::ActionDispatch::Static, "#{root}/public"
    end    
  end
end

我更喜欢在核心 gem 中而不是应用程序 X 中进行任何修复。但是,如果不可能,X 很好:)

4

1 回答 1

1

您确定在登台环境中加载了“核心”宝石吗?

于 2012-10-09T08:56:34.673 回答