Railsで保留中の移行を表示する


回答:


258

rake db:migrate:status(Rails 3から5)またはrails db:migrate:status(Rails 5)がこれを実現します。このコミットをご覧ください。

up移行が実行されたことを意味します。down移行が実行されていないことを意味します。


私はDon't know how to build task 'db:migrate:status'レールに乗ります3.2.8
Peter Ehrlich

1
@PeterEhrlich:それは表示されませんrake -Tが、他のものは表示されますか?
jrdioko

2
bundle exec rake db:migrate:status
Nadeem Yasin 2013年

2
このコマンドの出力をどのように読み取りますか?行のステータスが「ダウン」の場合、それは保留中の移行であることを意味しますか?
デニス

12
up移行が実行されたことを意味します。 down移行が実行されていないことを意味します。
Josh、

37

ありますrake db:abort_if_pending_migrations(少なくともRails 2.3.3では、いつ導入されたかはわかりません)。説明には、「保留中の移行があるとエラーが発生します」と記載されています。これは他のタスクの前提条件としてより多く使用されるようですが、目的に使用できると思います。

編集:「テスト」移行を生成して実行していない後の出力の例を次に示します

rails_project theIV$ rake db:abort_if_pending_migrations
(in /Users/theIV/Sites/rails_project/)
You have 1 pending migrations:
  20090828200602 Test
Run "rake db:migrate" to update your database then try again.

これを追加してRailsコンテナー間の依存関係を調整します
Vincent De Smet 2017年

まだRails 4.1.16にあります
Magne

レール5.1.3でも動作
Wilson Silva

16

このコマンドは、すべてのマイグレーションをそのステータス(UPまたはDOWN)とともに一覧表示します

Rails 3および4

rake db:migrate:status

Rails 5

rake db:migrate:status

# Or

rails db:migrate:status


6

これはレール5.2で機能します

ActiveRecord::Base.connection.migration_context.needs_migration?

2

rake -h(ヘルプ)を試して、rake -n(= rake --dry-run)を確認してください。したがって、おそらくrake -n db:migrateのようなもので、必要なものが得られるはずです。


2
それはうまくいきません。次のように表示されます:** db:migrate(first_time)を呼び出す**環境(first_time)を呼び出す**実行(ドライラン)環境**実行(
ドライラン

2

OPが求めているものとはまったく異なる場合がありますが、rakeタスクで使用するために保留されているマイグレーションがあるかどうかをすばやく確認する必要がある場合は、

rake db:migrate:status | grepダウン(Windowsを使用している場合は機能しない可能性があります)

ActiveRecord :: Migration.check_pending!(あなたが救助する必要があるActiveRecord :: PendingMigrationErrorを発生させます)

あなたはneeds_migrationを使用できますか?メソッド:https : //apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class


2
ActiveRecord::Migrator.needs_migration?Rails 5.1で
niborg

1

移行ステータスを確認する次のコマンド:

rake db:migrate:status

または

サーバーを実行すると、保留中の移行を最初に実行するメッセージが表示されます。



1

移行を実行するかどうかを決定するためにbashワンライナーが必要な場合(たとえば、保留中の移行がある場合にHerokuリリースフェーズコマンドでのみ移行する)、これは機能します。

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.