【问题标题】:Migrations are pending; run 'bin/rake db:migrate RAILS_ENV=development' to resolve this issue [unable to proceed]迁移待定;运行 'bin/rake db:migrate RAILS_ENV=development' 来解决这个问题 [无法继续]
【发布时间】:2013-12-03 14:56:58
【问题描述】:

关于 Ruby on Rails 迁移过程,我似乎有一个循环问题。我正在关注介绍文章,并且已经到了需要创建第一个表的地步。

我已经运行了以下,

[tims@web2 working_ror]# rails generate model Homepage first_name:string  last_name:string email:string message:text
  invoke  active_record
  create    db/migrate/20131119203948_create_homepages.rb
  create    app/models/homepage.rb
  invoke    test_unit
  createtest    /models/homepage_test.rb
  createtest    /fixtures/homepages.yml

然后我继续迁移,

[tims@web2 working_ror]# rake db:migrate
==  CreateHomepages: migrating ================================================
-- create_table(:homepages)
   -> 0.0493s
==  CreateHomepages: migrated (0.0494s) =======================================

但是,当我运行我的应用程序时,我会看到以下消息,

Migrations are pending; run 'bin/rake db:migrate RAILS_ENV=development' to resolve this issue.

但是,如果我运行上面的,

[tims@web2 working_ror]# rake db:migrate RAILS_ENV=development
[tims@web2 working_ror]# 

消息继续...

我花了相当多的时间研究论坛——我能找到的最接近的方法是删除并重新构建所有内容,它们完成了以下操作。

rake db:drop 耙分贝:创建 耙分贝:迁移

结果是一样的。

【问题讨论】:

  • rails -vcat Gemfile | grep rails 的输出是什么?
  • 只是为了确定:您是否在运行迁移后重新启动应用程序?
  • rails -v、Rails 4.0.1 和 cat Gemfile 的输出是什么 | grep rails?, # Bundle edge Rails: gem 'rails', github: 'rails/rails' gem 'rails', '4.0.1' gem 'sass-rails', '~> 4.0.0' gem 'coffee- rails', '~> 4.0.0' gem 'jquery-rails' # Turbolinks 使您的 Web 应用程序中的链接更快。阅读更多:github.com/rails/turbolinks # 轻松构建 JSON API。阅读更多:github.com/rails/jbuilder# bundle exec rake doc:rails 在 doc/api 下生成 API。
  • 我对开发服务器不需要重启的理解是错误的。
  • 我快速解决了这个问题,请在下面查看我的答案:stackoverflow.com/a/33054787/4902373

标签: ruby-on-rails ruby


【解决方案1】:

这就是我所做的:

rails db:environment:set RAILS_ENV=test

如果需要手动操作

rake db:schema:load RAILS_ENV=test

然后

bundle exec rake db:migrate

感谢 Ahmed Ali.......您的评论很有帮助。

【讨论】:

    【解决方案2】:

    检查以确保该表不存在:

    1. 类型 - rails dbconsole
    2. type - .tables(检查 rake db:migrate 期间是否有错误,其表名类似于 --create_table(:test) rake aborted!)
    3. 如果您在控制台类型中运行 .tables 后看到表名 - drop table TABLENAME;
    4. 然后 .quit 返回分支并再次运行 rake db:migrate 命令。

    【讨论】:

      【解决方案3】:

      试试 在 RAILS_ROOT/config/environments/development.rb 中将以下设置设为 false:

      config.active_record.migration_error = false#:page_load

      【讨论】:

        【解决方案4】:

        当你的迁移被搞砸(文件删除、手动重命名等)时,你可以使用一个奇怪的技巧

        1. 启动您最喜欢的数据库管理工具(例如 PGAdmin3)并浏览到有问题的数据库。
        2. 查找名为schema_migrations 的表并浏览其内容。它应该有一个名为version 的列。 Rails 使用此字段来检查迁移是否是最新的。
        3. 确保您的迁移时间戳与此列中的数据一致。如果您删除了较旧的迁移,请删除相应的时间戳。

        【讨论】:

          【解决方案5】:

          你可以的

          bundle exec rake test:prepare 
          

          在 Rails 4.1+ 中,他们弃用了 db:test:prepare 您现在可以使用:

          ActiveRecord::Migration.maintain_test_schema!
          

          如果需要手动操作

          rake db:schema:load RAILS_ENV=test
          

          然后

          bundle exec rake db:migrate
          

          【讨论】:

            【解决方案6】:

            你需要做的

            bundle exec rake test:prepare 
            

            bundle exec rake db:test:prepare
            

            然后

            bundle exec rake db:migrate
            

            在运行规范之前

            干杯

            引用自:Why am I asked to run 'rake db:migrate RAILS_ENV=test'?

            【讨论】:

            • 部署到使用db:test:prepare的CI服务器时遇到这个问题。使用test:prepare 完成了这项工作。不知道为什么。在 OS X 上,这两种变体都有效,在 linux 上(在 CI 服务器上),只有test:prepare。都使用 rails 5 和 ruby​​ 2.3.1。
            • 我必须先清除测试数据库才能使其工作 db:test:purge
            猜你喜欢
            • 2014-02-08
            • 1970-01-01
            • 1970-01-01
            • 2017-12-10
            • 2014-02-14
            • 1970-01-01
            • 1970-01-01
            • 2016-03-15
            • 2015-01-27
            相关资源
            最近更新 更多