Answers:
我通常:
rake db:migrate VERSION=XXX
在所有环境中执行一个,直到我要删除的版本之前的版本。rake db:migrate
重新执行一次即可。如果您的应用程序已经在生产或暂存中,那么编写另一个破坏表或列的迁移会更安全。
关于迁移的另一个很好的参考是:http : //guides.rubyonrails.org/migrations.html
self.down
迁移中定义的方法来“降级”数据库。
rake db:migrate:status
则会向您显示丢失文件的ID,您可以使用该ID来重新创建它。回来后,您可以按照此答案的建议取胜。
db:migrate:status
是救生员!
删除迁移的另一种方法:
$ rails d migration SameMigrationNameAsUsedToGenerate
在rake db:migrate
执行之前使用它,因为数据库中的更改将永久保留:)-或手动删除更改
在应用主目录下运行以下命令:
rake db:migrate:down VERSION="20140311142212"
(此处的版本是创建迁移时由rails加上的时间戳。此操作将还原由于此迁移而导致的数据库更改)
Run "rails destroy migration migration_name"
(migration_name是创建迁移时选择的一种用途。从迁移文件名中删除“ timestamp_ ”即可获取)
rails d migration migration_name
这也适用于Rails 5。
如果迁移是最新的,则可以通过执行以下操作删除迁移添加的数据库列:
rake db:rollback
然后运行以下命令删除迁移文件本身:
rails d migration WhateverYourMigrationWasNamed.rb
这些答案都不适合我所要解决的问题,因为我想删除的迁移丢失了:我在其他分支中创建并运行了迁移,然后将其丢弃。问题是运行迁移时,rails将版本添加到schema_migrations
数据库的表中。因此,即使未在您的数据库结构或架构中列出它,Rails也会寻找它。您可以通过运行以下操作来显示这些孤立的迁移:
rails db:migrate:status
请注意缺少的迁移的版本,并进入db控制台:
rails dbconsole
现在,从迁移表中手动删除版本:
delete from schema_migrations where version='<version>';
您现在应该很好。
我只是有同样的问题:
这为我解决了
侧面说明:从Rails 5.0.0
rake
开始已更改为rails
So,请执行以下操作
rails db:migrate VERSION = 0