私はdeviseをインストールしたばかりなので、テーブルには1人のユーザー(私)以外のデータがありませんでした。
データベースをもう一度やり直していたので、すべて削除しました。 Rails g scaffold
を実行して6つの新しいモデルとコントローラーを生成し、rake db:migrate
を実行しました
私の/db/migrate
ディレクトリには、ファイル名20130603211907_devise_create_users.rb
のデバイスファイルがあります。
これが問題です:rake db:migrate:down VERSION=20130603211907
を実行すると、新しい移行がすべて削除されます。
新しい移行をすべて削除せずに、移行を再度実行するにはどうすればよいですか?
ローカルで開発していて、モデルからすべてのデータを削除しても支障がない場合は、単にdrop
dbを作成し、次にcreate
&migrate
を最初から作成します。
Ruby on Rails database をパージまたは再作成する==
それはダウンステップを実行し、次にアップステップを実行します(このコマンドはテーブルをドロップできます!):
rake db:migrate:redo VERSION=xxxxxxx
テーブルが削除されないようにするには、一時的にdown
ステップをコメントアウトすると組み合わせてこれを実行できます。
みんな助けてくれてありがとう。これは私のために働いたものです:
警告:これらのコマンドはデータベース内のすべてのデータを削除します!
rake db:drop
rake db:create
rake db:migrate
指定したバージョンを再実行するrake db:migrate:redo VERSION=20130603211907
を呼び出すことができます。
また、移行チェーンを上るときにのみ実行する必要のある移行(データ変換、コピーなど)がある場合は、
def up
do_something
end
とdef down(going down)、def change(both way)メソッドそれぞれ。
移行を一時的に無効にするには、たとえば、メソッドの名前をdef up
からdef up_
に変更すると、移行チェーンの処理時に無視されます。
rake db:migrate:up VERSION=20090408054532
これにより、すべてのファイルがVERSION = 20090408054532まで移行されます
チェックアウト 単一の移行ファイルを実行