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

alv*_*spo 107 file-io ruby-on-rails ruby-on-rails-3

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

另外,我应该做db:reset或者db:drop如果我删除/删除迁移?

Fáb*_*sta 140

我通常:

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

如果您的应用程序已经在生产或登台,那么只编写另一个销毁您的表或列的迁移更安全.

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

  • 如果您已经删除了该文件,但没有实现rails就不会轻易放过,`rake db:migrate:status`将显示丢失文件的ID,您可以使用它来重新创建它.一旦它回来,你可以按照这个答案的建议来取得胜利. (34认同)
  • 删除迁移然后运行db:migrate会删除创建的表吗? (2认同)
  • 不,因为Rails不知道如何删除它.它需要调用迁移中定义的`self.down`方法来"降级"数据库. (2认同)

Ged*_*nas 66

删除迁移的另一种方法:

$ rails d migration SameMigrationNameAsUsedToGenerate
Run Code Online (Sandbox Code Playgroud)

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

  • 顺便说一句,"d"代表"破坏". (8认同)
  • "如果你的应用程序已经在生产或升级,那么只需编写另一个破坏你的表或列的迁移就更安全了." 因此,更改不会永远保留在数据库中 (3认同)

小智 20

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

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

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

  • 对于#2,正确的命令是:`rails d migration migration_name` (2认同)
  • 感谢“删除时间戳_”提示,这就是我需要的 (2认同)

sta*_*her 10

这些答案都不太适合我遇到的问题,因为我想要删除的迁移丢失了:我在其他分支中创建并运行了迁移,然后将其丢弃。问题是当运行迁移时,rails 将版本添加到schema_migrations数据库的表中。因此,即使它没有在您的数据库结构或模式中列出,rails 也会查找它。您可以通过运行以下命令来显示这些孤立的迁移:

rails db:migrate:status

记下缺少的迁移的版本并进入数据库控制台:

rails dbconsole

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

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

你现在应该好了。


Vic*_*cky 9

我们也可以向下迁移

rake db:migrate:down VERSION=versionnumber
Run Code Online (Sandbox Code Playgroud)

请参阅 Rubyonrailsguide


小智 8

我们可以用,

$ rails d migration table_name  
Run Code Online (Sandbox Code Playgroud)

哪个会删除迁移.