Rails 4移除迁移ID从迁移索引中

5
我该如何在 rake db:migrate:status 中删除带有 "** NO FILE **" 的迁移 ID 列表?例如:
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20131017204224  Create users
   up     20131218005823  ********** NO FILE **********
   up     20131218011334  ********** NO FILE **********

我不理解为什么手动删除迁移文件后,它仍然会保留旧版本的迁移文件。这是为了备案吗?但是如果没有与之相关的名称,它有什么用处呢?

我尝试使用db:migrate:down命令来处理这些文件,但是它显示文件不存在。我不知道该怎么办。

可以有人解释一下如何删除此列表,以及为什么会出现这种情况的一些见解吗?

3个回答

10

你也可以使用SQL在Rails控制台中删除它。

sql = "DELETE FROM schema_migrations WHERE VERSION = 'version_id'"
ActiveRecord::Base.connection.exec_query(sql)

9
你已经删除了文件,但ID仍然存在于模式表中。
只需登录mysql。
 SELECT * FROM schema_migrations; *- take note of the version_id*

然后

DELETE FROM schema_migrations WHERE VERSION = version_id; 

然后退出并验证

rake db:migrate:status

9

您需要从数据库的schema_migrations表中删除那些数字。


不要让人觉得我想要别人为我解决问题,但是在研究 schema_migrations 后,我猜想我应该重新加载模式以便重建它吗?我使用了这个命令 rake db:schema:dump rake db:schema:load 但是没有文件列表。我还猜想它是一种 ActiveRecord::Schema 方法,可以删除数据库中的特定版本? - Jay
1
如果你想从 schema_migrations 表中删除一个迁移编号,那么在删除文件之前,只需运行 rake db:rollback 来回滚迁移即可。 - spickermann
但是如果在运行rake db:rollback命令之前,我已经删除了该文件怎么办? - Jay
2
你没有遵循Rails的规范,真是可惜。;-) - spickermann
啊,糟糕...我本以为那就是答案。我只有在开始尝试迁移命令后才学会了这个:\ 哎呀...活着就是学习。感谢你的帮助。 - Jay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接