如何删除 Rails 3中的迁移文件

我想删除/删除一个迁移文件。我该怎么做呢?我知道这里也有类似的问题,但是作为一个更新,有没有比执行脚本/销毁更好的方法?

另外,如果我移除/删除一个迁移,我应该执行 db:reset还是 db:drop

159027 次浏览

I usually:

  1. 在所有环境中执行 rake db:migrate VERSION=XXX,到我想删除的版本之前。
  2. 手动删除迁移文件。
  3. 如果存在挂起的迁移(即,我删除的迁移不是最后一个) ,我只需再次执行一个新的 rake db:migrate

如果您的应用程序已经处于生产阶段或临时阶段,那么更安全的做法是编写另一个迁移来销毁您的表或列。

另一个很好的迁移参考是: http://guides.rubyonrails.org/migrations.html

有时,我发现自己删除了迁移文件,然后从数据库中删除了表 schema _  迁移的相应条目。虽然不怎么样,但很有效。

We can use,

$ rails d migration table_name

这将删除迁移。

Another way to delete the migration:

$ rails d migration SameMigrationNameAsUsedToGenerate

在执行 rake db:migrate之前使用它,因为数据库中的更改将永远保留:)或手动删除数据库中的更改

看看4.1回滚

Http://guides.rubyonrails.org/migrations.html

$rake db: rollback

从应用程序的主目录运行以下命令:

  1. rake db:migrate:down VERSION="20140311142212"(这里的版本是创建迁移时 Rails 预先设置的时间戳。此操作将恢复由于此迁移而发生的 DB 更改)

  2. Run "rails destroy migration migration_name"(mobile _ name 是创建迁移时选择的一种用法。请从迁移文件名中删除“ 时间戳 _”以获取它)

您还可以像下面这样运行向下迁移:

rake db:migrate:down VERSION=versionnumber

更多信息请参考关于迁移的 Ruby on Rails 指南

我也有同样的问题:

  1. 铁路和移民局 - 这删除了最后一个时间戳的迁移
  2. 铁路和移民局 这删除了另一个迁移
  3. 使用 git 状态检查未跟踪的文件是否不再
  4. 铁路移民局

这就解决了我的问题

这些答案都不太符合我的问题,因为我想删除的迁移缺失了: 我在另一个分支中创建并运行了一个迁移,这个迁移随后被丢弃。问题是,当迁移运行时,Rails 会将版本添加到数据库中的 schema_migrations表中。因此,即使它不在 db 结构或模式中列出,Rails 也会寻找它。 您可以通过运行以下命令来显示这些孤立的迁移:

rails db:migrate:status

请注意缺少的迁移版本,并进入 db 控制台:

rails dbconsole

现在手动从迁移表中删除版本:

delete from schema_migrations where version='<version>';

你现在应该没事了。

这在 Rails 5中也是可行的。

如果迁移是最近的一次,您可以删除迁移添加的数据库列:

rake db:rollback

然后运行以下命令删除迁移文件本身:

rails d migration WhateverYourMigrationWasNamed.rb

Side Note: 从 Rails5.0.0开始 rake已改为 rails 所以执行以下操作

Railsdb: 迁移 VERSION = 0