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

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


当前回答

回滚上次迁移:

# rails < 5.0
rake db:rollback

# rails >= 5.0
rake db:rollback
# or
rails db:rollback

回滚最近n次迁移

# rails < 5.0
rake db:rollback STEP=2

# rails >= 5.0
rake db:rollback STEP=2
# or
rails db:rollback STEP=2

回滚特定的迁移

# rails < 5.0
rake db:migrate:down VERSION=20100905201547

# rails >= 5.0
rake db:migrate:down VERSION=20100905201547
# or
rails db:migrate:down VERSION=20100905201547

其他回答

我发现这些步骤最有用。

执行rails db:migrate:status命令查看状态。然后,您将对想要删除的迁移有一个很好的了解。

然后执行rails db:rollback命令将修改的内容逐一恢复。这样做之后,您可以再次检查状态,以充分自信。

下一步,如果您想删除或删除。执行rails d migration <migration_name>。这将清理您创建的版本。

完成这些之后,您可以继续进行新的更改。

迁移使用该命令更改数据库的状态

bundle exec rake db:migrate

我们可以使用

bundle exec rake db:rollback

要从头再来,我们可以用

bundle exec rake db:migrate VERSION=0

正如您可能猜到的那样,将任何其他数字替换为0将迁移到该版本号,其中版本号来自按顺序列出的迁移。

如果是可逆迁移,并且是最后一次已执行的迁移,则执行rake db:rollback。你可以一直使用这个版本。

例如,如果迁移文件为20140716084539_create_customer_stats。Rb,回滚命令为:

rake db:migrate:down VERSION=20140716084539

对于多个数据库配置(RoR >= v6),您必须在命令中附加数据库名称,例如:

Rails db:rollback:primary,其中primary是config/databases中数据库的名称。Yml文件,回滚上次迁移。与往常一样,您可以在这里使用STEPS属性。 rails db:migrate:down:primary VERSION=your_migration_timestamp,只恢复提供的迁移版本。这里primary也是数据库的名称。

Use:

rake db:migrate:down VERSION=your_migrations's_version_number_here

版本是迁移文件名上的数字前缀。

如何找到版本:

迁移文件存储在rails_root/db/migrate目录中。找到要回滚到的适当文件并复制前缀编号。

例如:

文件名称:20140208031131_create_roles.rb

则版本号为20140208031131。