我尝试回滚上次迁移:
rake db:rollback
它告诉我以下内容:
== AddUserIdToPictures: reverting ============================================
-- remove_index(:pictures, {:column=>[:user_id, :visible]})
-> 0.1201s
-- remove_column(:pictures, :user_id, :integer)
-> 0.0127s
== AddUserIdToPictures: reverted (0.1567s) ===================================
然后,如果我尝试访问某个页面,我会收到错误:
Migrations are pending; run 'rake db:migrate RAILS_ENV=development' to resolve this issue
但当我做错误时说:rake db:migrate RAILS_ENV = development,它重新创建我上面的回滚:
== AddUserIdToPictures: migrating ============================================
-- add_column(:pictures, :user_id, :integer)
-> 0.0300s
-- add_index(:pictures, [:user_id, :visible])
-> 0.1007s
== AddUserIdToPictures: migrated (0.1310s) ===================================
这里有什么问题?我应该在运行命令之前删除迁移文件吗?
答案 0 :(得分:8)
如果回滚迁移,则数据库架构将还原为先前的迁移。
但是,如果您将迁移保留在迁移文件夹中,则Rails会假定应该运行迁移,并且在迁移到最新的架构之前无法运行。
如果要回滚架构,则应放弃迁移。删除文件,Rails不会抱怨。
答案 1 :(得分:1)
请记住,Rails会创建一个schema_migrations表,该表由一个名为“version”的列组成,其中包含最新的架构迁移ID字符串。 id字符串对应于db / schema.rb中的id字符串:
ActiveRecord::Schema.define(version: 20140284052547) do
# Your model definitions
end
如果SchemaMigration#version中的版本字符串与db / schema.rb中的版本字符串不匹配,您将获得“正在等待迁移”异常。如果您设置新系统或执行干净的操作系统安装,然后从备份文件还原数据库,以及运行“rake db:migrate”,则有时会发生这种情况 - 版本字符串将不同步。解决问题的方法是简单地在schema_migrations表中插入一个新行,其值包含在db / schema.rb中 - 但是如果您确定实际数据库与schema.rb中的模式定义匹配,则只执行此操作: / p>
insert into schema_migrations (version) values ('20140284052547');
答案 2 :(得分:0)
尝试通过以下方式回滚最近2次迁移: rake db:rollback STEP = 2
答案 3 :(得分:0)
尝试使用此命令进行回滚,而不是
rake db:rollback
如果您想要更改迁移文件,请使用
rake db:migrate:redo STEP=1
如果要删除表
,请使用它rake db:migrate:down VERSION=your_migration_version