諸般の事情で、一つのRailsアプリから複数のDBを参照することは偶にあると思います。
この手の場合、イカのような database.yml
を書くといいという情報はさくっと出てきますよね。
development_myapp:
<<: *default
database: main_db
development_subapp:
<<: *default
database: sub_db
ここで、sub_db に依存したtest,specを書こうと思うと sub_db
のschema:loadが実行できなくてこまっちゃう。
手元だったら、sub_dbを手作業で入れるとか回避策はありますが、CIツールに回そうと思うと、自動化が必要になってきます。
と言うわけで適当にRailsのコードを追ってたら出来たので晒しておきます。
lib/tasks/sub_db.rake
namespace :sub_db do
namespace :schema do
desc 'Load a sub_schema.rb file into the database'
task :load do
config = ActiveRecord::Base.configurations['test_subapp']
fail 'database.yml内にtest_subの設定を追加してください。' if config.blank?
ActiveRecord::Tasks::DatabaseTasks.load_schema_for(config, :ruby, "#{Rails.root}/db/sub_schema.rb")
end
end
end