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にしている。