[Ruby on Rails 3, Ruby on Rails 4] rake db: migrate を rollback で元に戻す
間違えて migrate したファイルを修正し、rake db:migrate を実行する。
Contents
手順
rake db:version
現在の状況を確認します。
% rake db:version
Current version: 20131002104226
% ls db/migrate
20130927063810_create_users.rb
20130927093118_create_tasks.rb
20130928114148_add_password_to_users.rb
20130929025154_add_adm_to_users.rb
20131002103504_create_tags.rb
20131002104226_create_task_tags.rb
rake db:rollback
20131002104226_create_task_tags.rb は修正前の状態です。
class CreateTaskTags < ActiveRecord::Migration
def change
create_table :task_tags do |t|
t.integer :task_id
t.integer :tag_id
t.timestamps
end
end
end
元に戻します。
% rake db:rollback
== CreateTaskTags: reverting =================================================
-- drop_table("task_tags")
-> 0.0011s
== CreateTaskTags: reverted (0.0043s) ========================================
% rake db:version
Current version: 20131002103504
ファイルの修正
巻き戻したので、未決の migration ファイルができています。
% rake db:abort_if_pending_migrations
You have 1 pending migrations:
20131002104226 CreateTaskTags
Run `rake db:migrate` to update your database then try again.
20131002104226_create_task_tags.rb を修正します。
class CreateTaskTags < ActiveRecord::Migration
def change
create_table :task_tags do |t|
t.references :task
t.references :tag
t.timestamps
end
add_index :task_tags, :task_id
add_index :task_tags, :tag_id
end
end
rake db:migrate
書き換えたファイルで再度 db:migrate を実行して完了。
% rake db:migrate
== CreateTaskTags: migrating =================================================
-- create_table(:task_tags)
-> 0.1019s
-- add_index(:task_tags, :task_id)
-> 0.0011s
-- add_index(:task_tags, :tag_id)
-> 0.0009s
== CreateTaskTags: migrated (0.1042s) ========================================
補遺
ステップ数を指定して戻す
$ rake db:rollback STEP=2
バージョンを指定して戻す
最初のバージョンに戻す
$ rake db:migrate VERSION=0