回答:
rake db:migrate:redo VERSION=xxxxxxx
、しかしdown
それはup
ステップを実行します。これは、一時的にダウンステップをコメントアウトすることと組み合わせて行うことができます。
rake -T
。
db:test:prepare
そのリストにも表示されません。神私はパーティーに遅れました。
rake db:migrate:up VERSION=my_version
場合、schema_migrationsテーブルはまだ実行されていると表示されるため、何も実行されない可能性があります。同じ状況でrake db:migrate:redo VERSION=my_version
は、テーブルを削除できないために失敗する可能性があります。この場合、down
移行のメソッドを一時的にコメント化して再実行しますrake db:migrate:redo...
rake db:migrate:up VERSION=1234567890
同様rake db:migrate:down
に、特定の移行を停止します。を使用すると、使用可能なRakeタスクのリストを取得できますrake -T
。
VERSION
言及されているのは、各移行ファイルの先頭にある整数値です(これは、作成されたときのタイムスタンプにすぎません)。たとえば、 VERSION=20150720023630
。
VERSION
それがコマンドで最初に来たり、コマンドを以前に設定することができますので、ちょうど環境変数です:VERSION=1234567890 rake db:migrate:up
変更された他のすべての移行とは独立して再実行する必要がある単一の移行を実行する必要がありました。コンソールを起動してこれを実行します。
>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down
より便利には、これをrakeタスクなどに入れることができます。
change
、YourMigrations.migrate(:up)
代わりに(または:down
あまりにも)実行します
require "#{Rails.root}/db/migrate/your_migrations.rb"
rake db:migrate VERSION=20098252345
試してみてください。
VERSION
それはコマンドで最初に来たり、コマンドを以前に設定することができますので、ちょうど環境変数です:VERSION=20098252345 rake db:migrate
上記のkorchの答えを拡張しても、require
うまくいきませんload
でした。具体的には、移行ファイルの場合:
class ChangeMinQuantityToRaces < ActiveRecord::Migration
def change
change_column :races, :min_quantity, :integer, :default => 0
end
end
コンソールで入力
> load 'db/migrate/30130925110821_change_min_quantity_to_races.rb'
> ChangeMinQuantityToRaces.new.change
私のために働いた。
> Race.new.min_quantity # => 0
これは、ruby 1.9.3p484(2013-11-22リビジョン43786)[x86_64-linux]およびRails 3.2.13用でした。
これと同じ問題に遭遇したので、これに私の2¢を追加します。
新しい移行を作成せずに移行をやり直したい場合は、次の操作を実行できます。
rails dbconsole -p
devdb=# delete from public.schema_migrations where version = '20150105181157';
そして、railsは20150105181157の移行を実行したことを「忘れ」ます。db:migrateを実行すると、再び実行されます。
しかし、これはほとんど常に悪い考えです。開発ブランチがあり、まだ移行を具体化しておらず、開発に何かを追加したい場合は、それが理にかなっている1つの例です。ただし、それでも移行を双方向にして、適切にロールバックして繰り返し再試行できるようにすることをお勧めします。
私はこれを開発で非常に簡単にするユーティリティメソッドを持っています。多くの移行を作成しないようにするのに役立ちます。通常、移行が展開されるまで移行を変更します。
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
移行を大幅に変更する場合、この手法を開発で使用します。大量の移行を行って途中でデータを失いたくありません(特に、長い時間がかかるレガシーデータをインポートする場合)。再度インポートする必要はありません)。
これは100%ハックであり、本番環境でこれを行うことは絶対にお勧めしませんが、トリックを実行します。
STEP=n
の引数をdb:migrate
(ここで、n
移行の数がためにそこにいるだけのように、実行することですdb:rollback
) -あなたは何ができるrake db:migrate STEP=1
かrake db:migrate STEP=2
、など