我的情况如下:
- 我正在运行应用程序 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 很好:)