開発環境で各rake db:migrate Rails_ENV=test
の後にrake db:migrate
を自動的に実行する方法はありますか?
私はguardとguard-rspecを実行していて、ブラウザで手動で動作していても、テストの失敗に本当に悩まされています。
データベースの変更後にrake db:migrate:test
を呼び出すのを忘れただけであることがわかるまで、開発を一時停止するたびに少なくとも15分かかります。
私はすでにguardを使用しているので、プロジェクトにguard-rakeを追加することも考えましたが、どのファイルを見るべきかわかりません。 development.sqlite3を見ると、ブラウザを介してレコードを操作するたびにrake db:migrate Rails_ENV=test
が起動されるため、これは実際には何でもありません。が欲しいです。
誰かが私の問題を手伝ってくれる?
おそらく、.bashrc
ファイルにコマンドエイリアスを作成するだけです。
〜/ .bashrc
alias rake_db_migrate='rake db:migrate db:test:prepare'
ターミナル
$ rake_db_migrate
私はこのエイリアスを使用します:alias rake_db_migrate='rake db:migrate && rake db:migrate Rails_ENV=test'
なぜならrake db:test:prepare
は非推奨です。
私がこれを使用する理由は、プロジェクトがpg_search(postgreSQL)をstructure.sql(schema.rbではなく)と一緒に使用し、何らかの理由でrake db:migrate
はテストデータベースを準備しません。
私はこのようにエイリアスを使用することを好みます:
あなたの~/.bashrc
alias migrate='rake db:migrate && rake db:test:prepare'
データベースをリセットしなかったことを思い出すためだけに、テストが合格しない理由を理解するために30分を費やすのは簡単です。これはその問題を解決します。
私が非常に気に入っているオプションは、別のrakeスクリプトで実際のタスクをオーバーライドすることです。これは、移行の実行後に自動的に呼び出されます。このように、データベースを移行した後は常にERD図を作成します。
# lib/tasks/database.rake
namespace :db do
desc 'Additional migrate task that creates the diagram'
task :migrate do
if Rails.env.development?
Rake::Task['diagram:erd'].invoke
end
end
end
だからあなたの場合:
# lib/tasks/database.rake
namespace :db do
desc 'Additional migrate task that creates the diagram'
task :migrate do
`rake db:migrate Rails_ENV=test`
end
end
別のアプローチは、次を実行することです。これにより、新しいスキーマがテストデータベースに複製されます。
rake db:migrate db:test:clone
より高速:alias migrate='rake db:migrate db:test:prepare'
(これを.bashrc
に追加すると、ロードされますRails 1回のみ)
guard-rake
を使用するという最初の質問に答えて、db/schema.rb
を見ることができます。これは、データベースを移行するたびに更新されるためです。ただし、ロールバックを実行するとこのファイルも変更されるため、db/schma.rb
のスキーマ定義行から移行バージョンを引き出すか、rake db:test:prepare
の代わりにrake db:migrate Rails_ENV=test
を使用する必要があります。 。
これは脆弱なように思われるため、シェルエイリアスを使用することをお勧めします。もっと良い方法があったらいいのに!