web-dev-qa-db-ja.com

開発環境で「rakedb:migrate」の後に「rakedb:migrate Rails_ENV = test」を自動的に設定する方法はありますか?

開発環境で各rake db:migrate Rails_ENV=testの後にrake db:migrateを自動的に実行する方法はありますか?

私はguardguard-rspecを実行していて、ブラウザで手動で動作していても、テストの失敗に本当に悩まされています。

データベースの変更後にrake db:migrate:testを呼び出すのを忘れただけであることがわかるまで、開発を一時停止するたびに少なくとも15分かかります。

私はすでにguardを使用しているので、プロジェクトにguard-rakeを追加することも考えましたが、どのファイルを見るべきかわかりません。 development.sqlite3を見ると、ブラウザを介してレコードを操作するたびにrake db:migrate Rails_ENV=testが起動されるため、これは実際には何でもありません。が欲しいです。

誰かが私の問題を手伝ってくれる?

24
NobbZ

おそらく、.bashrcファイルにコマンドエイリアスを作成するだけです。

〜/ .bashrc

alias rake_db_migrate='rake db:migrate db:test:prepare'

ターミナル

$ rake_db_migrate
18
Daniel Doezema

私はこのエイリアスを使用します:
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はテストデータベースを準備しません。

3
echo

私はこのようにエイリアスを使用することを好みます:

あなたの~/.bashrc

alias migrate='rake db:migrate && rake db:test:prepare'

データベースをリセットしなかったことを思い出すためだけに、テストが合格しない理由を理解するために30分を費やすのは簡単です。これはその問題を解決します。

3
fontno

私が非常に気に入っているオプションは、別の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
2
Besi

より高速:alias migrate='rake db:migrate db:test:prepare'(これを.bashrcに追加すると、ロードされますRails 1回のみ)

2
Dorian

guard-rakeを使用するという最初の質問に答えて、db/schema.rbを見ることができます。これは、データベースを移行するたびに更新されるためです。ただし、ロールバックを実行するとこのファイルも変更されるため、db/schma.rbのスキーマ定義行から移行バージョンを引き出すか、rake db:test:prepareの代わりにrake db:migrate Rails_ENV=testを使用する必要があります。 。

これは脆弱なように思われるため、シェルエイリアスを使用することをお勧めします。もっと良い方法があったらいいのに!

0
Michael Herold