我有一个迁移文件db\migrate\20100905201547_create_blocks.rb。
如何具体回滚该迁移文件?
我有一个迁移文件db\migrate\20100905201547_create_blocks.rb。
如何具体回滚该迁移文件?
当前回答
如果你使用的是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
其他回答
Use:
rake db:migrate:down VERSION=your_migrations's_version_number_here
版本是迁移文件名上的数字前缀。
如何找到版本:
迁移文件存储在rails_root/db/migrate目录中。找到要回滚到的适当文件并复制前缀编号。
例如:
文件名称:20140208031131_create_roles.rb
则版本号为20140208031131。
要回滚所有的迁移到一个特定的版本(例如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
参考:只迁移或恢复某些迁移
对于多个数据库配置(RoR >= v6),您必须在命令中附加数据库名称,例如:
Rails db:rollback:primary,其中primary是config/databases中数据库的名称。Yml文件,回滚上次迁移。与往常一样,您可以在这里使用STEPS属性。 rails db:migrate:down:primary VERSION=your_migration_timestamp,只恢复提供的迁移版本。这里primary也是数据库的名称。
迁移使用该命令更改数据库的状态
bundle exec rake db:migrate
我们可以使用
bundle exec rake db:rollback
要从头再来,我们可以用
bundle exec rake db:migrate VERSION=0
正如您可能猜到的那样,将任何其他数字替换为0将迁移到该版本号,其中版本号来自按顺序列出的迁移。
如果你使用的是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