Rails アプリで、たくさんある移行のうち 1 つだけを実行しようとしています。これどうやってするの?その前後に移行を実行したくありません。ありがとう。
11 に答える
rake db:migrate:redo VERSION=xxxxxxx
、しかしdown
それはup
ステップを実行します。これは、ダウン ステップを一時的にコメント アウトすることと組み合わせて行うことができます。
rake db:migrate:up VERSION=1234567890
同様rake db:migrate:down
に、特定の移行を停止します。で利用可能な rake タスクのリストを取得できますrake -T
。
変更された単一の移行を実行する必要があり、他のすべての移行とは別に再実行する必要がありました。コンソールを起動して、次のようにします。
>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down
もっと便利なことに、これはレーキタスクなどに入れることができます。
rake db:migrate:up VERSION=version_no
特定の移行スクリプトを移行 (追加) します
rake db:migrate:down VERSION=version_no
特定の移行スクリプトを削除します
rake db:migrate VERSION=20098252345
それを試してみてください。
rake db:migrate:redo version='xxxx'
xxxx を必ず引用符で囲んでください。xxxx は移行のタイムスタンプ (または移行 ID) です。
を使用して、行った以前の移行のタイムスタンプ (移行 ID) を確認できます。
rake db:migrate:status
これを開発で非常に簡単にするユーティリティメソッドがあります。あまりにも多くの移行を作成することを回避するのに役立つことがわかりました。通常、移行が展開されるまで移行を変更します。
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
コンソール経由で移行クラスを実行する方法が必要です。移行コードを認識できないようです。
ただし、コメントが示すように、移行は順番に実行することをお勧めします。使用する:
rake db:migrate VERSION=##########
スクリプト/コンソールへの移行でコードをコピーして貼り付けますか?
私は、移行を大幅に変更するときに開発でこの手法を使用します。大量に移行して途中でデータを失いたくありません (特に、移行に時間がかかるレガシー データをインポートする場合)。再度再インポートする必要はありません)。
これは 100% ハックであり、本番環境でこれを行うことは絶対にお勧めしませんが、うまくいくでしょう:
- 再実行するマイグレーションをそのディレクトリから一時的な場所に移動します
- 同じ名前で別の移行を生成する
- 元の移行コードをコピーして、新しく生成された移行ファイルに貼り付けます
- 新しい移行を実行する
- 新しく生成された移行ファイルを削除します
- スキーマの移行を編集して、最新の値を削除します
- 古い移行ファイルを復元する