我有一个迁移文件db\migrate\20100905201547_create_blocks.rb。
如何具体回滚该迁移文件?
我有一个迁移文件db\migrate\20100905201547_create_blocks.rb。
如何具体回滚该迁移文件?
当前回答
rake db:migrate:down VERSION=20100905201547
将回滚特定的文件。
要找到所有迁移的版本,你可以使用这个命令:
rake db:migrate:status
或者,简单地说,迁移文件名的前缀就是需要回滚的版本。
请参阅Ruby on Rails指南中关于迁移的条目。
其他回答
此外:
当您很久以前部署的迁移不允许您迁移新的迁移时。
我在一个较大的Ruby on Rails应用程序中工作,其中有超过1000个迁移文件。而且,我们需要一个月的时间来发布一个中等规模的功能。我正在开发一个功能,一个月前我已经部署了一个迁移,然后在审查过程中,迁移的结构和文件名发生了变化,现在我尝试部署我的新代码,构建失败了,说:
ActiveRecord::StatementInvalid: PG::DuplicateColumn: ERROR: column "my_new_field" of relation "accounts"已经存在
上述解决方案都不适合我,因为旧的迁移文件丢失了,而我打算在新迁移文件中创建的字段已经存在于数据库中。对我来说唯一有效的解决方法是:
我把文件转移到服务器上了 我打开了rails控制台 我在IRB会话中需要该文件 然后AddNewMyNewFieldToAccounts.new.down
然后我可以再次运行部署构建。
迁移文件是这样的,
20221213051020_my_migrations
在本例中,模型名应该是MyMigration。migration以一个复数词结尾,所以它以migrations结尾。
要回滚这个特定的迁移,您必须理解迁移名称的第一部分(迁移名称前面的数字)是迁移编号。
要回滚这次迁移,只需打开终端并写入,
rake db:migrate:down VERSION=migration_number
最后,你必须在终端中输入回滚这个特定的迁移,
在终端上写下面的命令回滚一个特定的迁移,上面的命令只是给你解释
rake db:migrate:down VERSION=20221213051020
只需记住,每次迁移都有不同的迁移编号,因此请仔细观察并手动复制、粘贴或键入。
您可以使用down migration命令回退迁移,如下所示:
rake db:migrate:down VERSION=20100905201547
要回滚所有的迁移到一个特定的版本(例如20181002222222),使用:
rake db:migrate VERSION=20181002222222
(注意,这里使用的是db:migrate,而不是其他答案中的db:migrate:down。)
假设指定的迁移版本比当前版本更老,这将回滚到指定版本之前的所有迁移,但不包括指定版本。
例如,如果rake db:migrate:status初始显示:
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
up 20181003171932 Some migration description
up 20181004211151 Some migration description
up 20181005151403 Some migration description
运行:
rake db:migrate VERSION=20181002222222
会导致:
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
down 20181003171932 Some migration description
down 20181004211151 Some migration description
down 20181005151403 Some migration description
参考:只迁移或恢复某些迁移
Use:
rake db:migrate:down VERSION=your_migrations's_version_number_here
版本是迁移文件名上的数字前缀。
如何找到版本:
迁移文件存储在rails_root/db/migrate目录中。找到要回滚到的适当文件并复制前缀编号。
例如:
文件名称:20140208031131_create_roles.rb
则版本号为20140208031131。