developmentでridgepole applyしたときにtest DBもつくる
Rails標準のMigrationを使う場合はdevelopmentのDBをアップデートしたらschema.rb
が更新されてspec/rails_helper.rb
とかに書いてある
ActiveRecord::Migration.maintain_test_schema!
っていうのでrspec実行前にtest DBをmigrationしてくれる。
ridgepoleを使っている場合はschema.rb
使わないので上記の行を消してtest DBにschemaの変更を反映するのにdevelopmentとは別途applyしてたんだけど、面倒なのでridgepoleのapply taskをこんな感じにしてみた。
namespace :ridgepole do desc 'Apply schema definition' task :apply do sh 'ridgepole', '--config', 'config/database.yml', '--env', ENV.fetch('RAILS_ENV', 'development'), '--apply', '--file', 'db/Schemafile.rb' unless Rails.env.production? Rake::Task['db:schema:dump'].invoke Rake::Task['db:test:prepare'].invoke Rails.root.join('db/schema.rb').delete end end end
ridgepole applyするとtest DBも一緒に作られて便利。
ちなみにridgepole --env test --apply
でもいいんだけど差分計算して適用する必要なくて、一回消してdevelopmentと同じ状態で作り直したいからdb:test:prepare
にしている。