私の状況は次のとおりです。
- アプリケーション X を実行しています
- Xは宝石「コア」を使用します
- core は X のモデルをモデル A、B、C、D で拡張します
開発中、これは完全に機能します。しかし、私が走るとき
(bundle exec) rake RAILS_ENV=staging RAILS_GROUPS=assets assets:precompile
失敗する
** Execute environment
rake aborted!
uninitialized constant A
Rails.application.eager_load! を配置して、この問題を修正しようとしました。の前Application.initialize!
にenvironments.rbが、他のエラーにつながっただけだと思います。
assets:precompile の前にエンジンからのモデルを gem に含める方法はありますか? すべてをeager_loadするのではなく、1つずつ要求することについて読んだことがありますが、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
アプリケーション X ではなく、コア gem に修正を入れることを好みます。ただし、それが不可能な場合は、X で問題ありません:)