克隆并迁移项目后,出现“迁移正在挂起;运行'bin/rake db:migrate RAILS_ENV=development'来解决此问题。”的提示。

25
我克隆了我的项目。 通过“bundle install”捆绑,然后运行“rake db:migrate”。 我得到了这个错误:(当我运行rails服务器并在浏览器中打开localhost:3000时)“迁移正在等待; 运行'bin / rake db:migrate RAILS_ENV = development'以解决此问题。“
我逐个检查了所有迁移,并且所有迁移都已执行而没有错误。 在执行“rake db:migrate”之后也没有显示任何错误。
这是我执行“rake db:migrate:status”时看到的内容
我处于开发环境。 如果您需要其他信息,请告诉我。
我还尝试了“bundle exec rake db:migrate”和“bundle exec rake db:migrate:reset”,如“burninggramma”所建议的。
有什么线索导致错误吗?

1
请展示 rake db:migrate:status 的输出结果。所有的迁移脚本都已经迁移了吗? - Eich
你在第一部分写道:“,然后运行“rake db:migrate”。我收到了这个错误:”。但是你也写道:“执行“rake db:migrate”后没有显示任何错误。”那么这些错误是什么时候出现的? - p1100i
@burninggramma 对不起。当我运行服务器并在浏览器上打开localhost:3000时。 - user2911232
14个回答

33

有趣。你运行了rake db:create吗?假设你正在使用sqlite3,请执行以下操作:

      rm -f db/*.sqlite3
      rake db:create
      RAILS_ENV=development bundle exec rake db:migrate
      rails s -e development

另外,请问您能否列出您的 config/database.yml 文件的内容?

编辑:注意! 显然,这将会导致您失去现有的数据。


好的,很奇怪。现在它正常工作了。我认为 db:create 是关键,但不知道为什么会发生这种情况... - user2911232
1
@stefanos-ioannou rake db:create 如果数据库不存在,则创建数据库。在不创建数据库的情况下运行migrate应该会抛出错误。不确定这里出了什么问题。回想一下,我可能会尝试运行rake db:migrate VERSION = 0; rake db:migrate,以查看是否有任何错误。 - lewstherin

17
在运行迁移命令后,我仍然遇到了相同的错误。
对我有效的方法是停止Rails服务器并重新启动它。

也适用于我。 - Javier Núñez
我也一样。我忘记在我的Gemfile中添加了gem 'mysql2',所以重新启动就可以解决问题。 - albertski

6

使用rake db:migrate:status命令列出已执行的迁移,检查每个迁移是否已经被执行。如果有未完成的迁移,您可以尝试使用rake db:abort_if_pending_migrations命令取消迁移并再次执行。


在这里查看状态:https://www.evernote.com/shard/s238/sh/c6b9371c-2fd0-41b8-9d3d-038c2676bb31/a98ae6e0fd5ca6a769eefe2a270f348d - user2911232
我还使用了abort_if_pending并再次运行rake(在删除所有内容后)。仍然没有任何反应。没有显示错误。 - user2911232

4

1. 或许在ruby2/rails4中是默认的,但你试过这个吗:bundle exec rake db:migrate

2. 另一个选项是重置整个数据库 - 谨慎使用!会清除所有数据 - bundle exec rake db:migrate:reset

+) 我只是确保你在同一个开发环境中执行所有操作:

RAILS_ENV=development bundle exec rake db:migrate:reset
RAILS_ENV=development bundle exec rails s

1
bundle exec rake db:migrate:reset 对我有效,谢谢。 - Muhammed Moussa

4

对我来说,运行rake db:migrate RAILS_ENV=test就可以了。


1
对我来说,我只是不得不迁移,因为发生了错误:

rake db:migrate --trace

通过在development.rb中将config.active_record.migration_error设置为false可能使其可用,但我不建议这样做。

1
我在进行《学会足够的知识来危险》Rails教程时遇到了相同的错误。我正在Windows 10机器上使用Git Bash终端。在另一个终端中,我尝试使用以下命令迁移我的数据库后,在运行guard的终端中出现了错误:

$ bundle exec rake db: migrate:

尝试了@lewstherin提供的解决方案后,我仍然遇到了相同的错误。我尝试了以下命令:

$ rails test 并得到了明确且有用的警告:

存在未迁移的内容。要解决此问题,请运行:

bin/rails db:migrate RAILS_ENV=test

我运行了以下命令:
$ bin/rails db:migrate RAILS_ENV=test
现在我又可以工作了。

1
我在浏览器中遇到了同样的错误,但仔细查看错误消息后,我注意到迁移注释和帖子文件中多了一个空格。一旦我将其删除,它就完美地工作了。

1
打开数据库并点击schema_migration表。迁移将如下列出。 enter image description here 按版本列排序并找到您想要回退的最新迁移。删除或插入一个新的迁移。Rails在此表中保留所有迁移历史记录,因此您可以根据自己的喜好调整迁移历史记录。

0

“db:migrate:reset” 没有起作用的两个原因

1) loosing data 
2) we moved from php to rails, so we had an existing DB and the migrations were written on top of it not from the scratch

所以我尝试的是使用已经在我的数据库(开发环境)上运行过的迁移列表(仅版本值)更新'scheema_migrations'(mysql)表,这可能是一个有点耗时的过程,但它有效。不过,我不会在生产环境中尝试这样做。

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