我有一个迁移文件db\migrate\20100905201547_create_blocks.rb。

如何具体回滚该迁移文件?


当前回答

您可以使用down migration命令回退迁移,如下所示:

rake db:migrate:down VERSION=20100905201547

其他回答

如果你想要回滚和迁移,你可以运行:

rake db:migrate:redo

也就是:

rake db:rollback
rake db:migrate

此外:

当您很久以前部署的迁移不允许您迁移新的迁移时。

我在一个较大的Ruby on Rails应用程序中工作,其中有超过1000个迁移文件。而且,我们需要一个月的时间来发布一个中等规模的功能。我正在开发一个功能,一个月前我已经部署了一个迁移,然后在审查过程中,迁移的结构和文件名发生了变化,现在我尝试部署我的新代码,构建失败了,说:

ActiveRecord::StatementInvalid: PG::DuplicateColumn: ERROR: column "my_new_field" of relation "accounts"已经存在

上述解决方案都不适合我,因为旧的迁移文件丢失了,而我打算在新迁移文件中创建的字段已经存在于数据库中。对我来说唯一有效的解决方法是:

我把文件转移到服务器上了 我打开了rails控制台 我在IRB会话中需要该文件 然后AddNewMyNewFieldToAccounts.new.down

然后我可以再次运行部署构建。

如果你使用的是Ruby on Rails 3

步骤:1(检查最后一次迁移)

bundle exec rake db:migrate:status

步骤:2(回滚上一次迁移)

bundle exec rake db:rollback

现在,您可以逐个安全地恢复迁移。

对于特定的迁移

Rails d migration <migration_name>

用于恢复多次迁移

bundle exec rake db:rollback STEP=n

其中n是要回滚的迁移次数。

例如:bundle exec rake db:rollback STEP=5

您可以使用down migration命令回退迁移,如下所示:

rake db:migrate:down VERSION=20100905201547

您可以使用rake db:rollback和不同的选项来回滚迁移。语法将根据您的需求有所不同。

如果您只想回滚最后一次迁移,那么可以使用这两种方法中的任何一种

rake db:rollback

or

rake db:rollback STEP=1

如果你想要一次回滚迁移数量,那么你只需传递一个参数:

rake db:rollback STEP=n

其中n是迁移到回滚的次数,从最近一次迁移开始计算。

如果你想要回滚到一个特定的迁移,那么你应该在下面传递迁移的版本:

rake db:migrate:down VERSION=xxxxx

其中XXXXX是迁移的版本号。