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

时间:2010-10-06 12:51:06

标签: ruby-on-rails ruby-on-rails-3 file-io

我想删除/删除迁移文件。我该怎么做呢?我知道这里有类似的问题,但作为更新,有没有比做脚本/破坏更好的方法?

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

11 个答案:

答案 0 :(得分:139)

我通常:

  1. 在所有环境中执行rake db:migrate VERSION=XXX,到我要删除的版本之前的版本。
  2. 手动删除迁移文件。
  3. 如果有待处理的迁移(即我删除的迁移不是最后一次迁移),我只是再次执行新的rake db:migrate
  4. 如果您的应用程序已经在生产或登台,那么只编写另一个销毁您的表或列的迁移更安全。

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

答案 1 :(得分:65)

删除迁移的另一种方法:

$ rails d migration SameMigrationNameAsUsedToGenerate

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

答案 2 :(得分:18)

从app的主目录运行以下命令:

  1. rake db:migrate:down VERSION="20140311142212"(此处版本是创建迁移时由rails预先设置的时间戳。此操作将还原由于此迁移而导致的数据库更改)

  2. Run "rails destroy migration migration_name"(migration_name是创建迁移时选择的用户。从迁移文件名中删除“ timestamp _ ”以获取它)

答案 3 :(得分:9)

我们也可以向下迁移

rake db:migrate:down VERSION=versionnumber

参考 Rubyonrailsguide

答案 4 :(得分:8)

我们可以使用,

$ rails d migration table_name  

将删除迁移。

答案 5 :(得分:2)

有时我发现自己删除了迁移文件,然后从数据库中删除了表schema_migrations上的相应条目。不漂亮,但它的工作原理。

答案 6 :(得分:2)

在Rails 5中也可以使用。

如果迁移是最新的,则可以通过执行以下操作来删除迁移添加的数据库列:

rake db:rollback

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

rails d migration WhateverYourMigrationWasNamed.rb 

答案 7 :(得分:1)

看4.1回滚

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

$ rake db:rollback

答案 8 :(得分:0)

我遇到了同样的问题:

  1. rails d migration fuu   - 这删除了上次时间戳的迁移
  2. rails d migration fuu   - 这删除了其他迁移
  3. 使用git status检查不再是未跟踪文件
  4. rails g migration fuu
  5. 为我修好了

答案 9 :(得分:0)

这些答案都不能完全解决我要删除的迁移时遇到的问题: 我已经在其他分支中创建并运行了迁移,然后将该迁移丢弃了。问题是运行迁移时,rails将版本添加到数据库的schema_migrations表中。因此,即使未在您的数据库结构或架构中列出它,Rails也会寻找它。 您可以运行以下命令来显示这些孤立的迁移:

rails db:migrate:status

请注意缺少的迁移版本,然后进入数据库控制台:

rails dbconsole

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

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

您现在应该很好。

答案 10 :(得分:0)

侧面说明: 从Rails 5.0.0开始 rake已更改为rails 因此,请执行以下操作

rails db:migrate VERSION = 0