web-dev-qa-db-ja.com

新しい移行をすべて削除せずに、移行を再度実行するにはどうすればよいですか?

私はdeviseをインストールしたばかりなので、テーブルには1人のユーザー(私)以外のデータがありませんでした。

データベースをもう一度やり直していたので、すべて削除しました。 Rails g scaffoldを実行して6つの新しいモデルとコントローラーを生成し、rake db:migrateを実行しました

私の/db/migrateディレクトリには、ファイル名20130603211907_devise_create_users.rbのデバイスファイルがあります。

これが問題です:rake db:migrate:down VERSION=20130603211907を実行すると、新しい移行がすべて削除されます。

新しい移行をすべて削除せずに、移行を再度実行するにはどうすればよいですか?

19
Kush

ローカルで開発していて、モデルからすべてのデータを削除しても支障がない場合は、単にdrop dbを作成し、次にcreatemigrateを最初から作成します。

Ruby on Rails database をパージまたは再作成する==

7
davegson

それはダウンステップを実行し、次にアップステップを実行します(このコマンドはテーブルをドロップできます!):

rake db:migrate:redo VERSION=xxxxxxx

テーブルが削除されないようにするには、一時的にdownステップをコメントアウトすると組み合わせてこれを実行できます。

50
Sachin R

みんな助けてくれてありがとう。これは私のために働いたものです:

警告:これらのコマンドはデータベース内のすべてのデータを削除します!

rake db:drop
rake db:create
rake db:migrate
7
Kush

指定したバージョンを再実行するrake db:migrate:redo VERSION=20130603211907を呼び出すことができます。

また、移行チェーンを上るときにのみ実行する必要のある移行(データ変換、コピーなど)がある場合は、

def up 
  do_something
end

とdef down(going down)、def change(both way)メソッドそれぞれ。

移行を一時的に無効にするには、たとえば、メソッドの名前をdef upからdef up_に変更すると、移行チェーンの処理時に無視されます。

6
woltob
rake db:migrate:up VERSION=20090408054532

これにより、すべてのファイルがVERSION = 20090408054532まで移行されます

チェックアウト 単一の移行ファイルを実行

3
bunty