我试图回滚上次迁移:
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=开发时,它会重新创建我在上面回滚的内容:
== AddUserIdToPictures: migrating ============================================
-- add_column(:pictures, :user_id, :integer)
-> 0.0300s
-- add_index(:pictures, [:user_id, :visible])
-> 0.1007s
== AddUserIdToPictures: migrated (0.1310s) ===================================
这里有什么问题? 我应该在运行命令之前删除迁移文件吗?
如果回滚迁移,数据库架构将还原为以前的迁移。
但是,如果您将迁移保留在迁移文件夹中,Rails 会假定迁移应该运行,并且在迁移到最新模式之前不会起作用。
如果要回滚架构,则应放弃迁移。删除文件,Rails不会抱怨。
,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 中的架构定义匹配时才执行此操作:
insert into schema_migrations (version) values ('20140284052547');
尝试通过以下方式回滚 2 次最后的迁移:耙子 db:回滚步骤=2
尝试此命令回滚,而不是
rake db:rollback
如果要更改迁移文件,请使用:
rake db:migrate:redo STEP=1
如果要删除表,请使用它
rake db:migrate:down VERSION=your_migration_version