资产出错:由于引擎gem中的Model而预编译

时间:2012-09-26 11:55:18

标签: ruby-on-rails-3 rubygems asset-pipeline rails-engines

我的情况如下:

  • 我正在运行应用程序X
  • X使用gem" 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来解决此问题!在environment.rb中的Application.initialize!之前,但我担心这只会导致其他错误。

有没有办法在资产:precompile之前在gem中包含引擎的模型? 我读了一些关于逐个要求它们而不是eager_load all的东西,但是每个系统的宝石路径都不同。

engine.rb in" core":

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

我更喜欢在核心宝石而不是应用程序X中添加任何修复。但是,如果不可能,X就可以了:)

1 个答案:

答案 0 :(得分:1)

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