【问题标题】:rake db:migrate always outputs SELECT "schema_migrations".* FROM "schema_migrations"rake db:migrate 总是输出 SELECT "schema_migrations".* FROM "schema_migrations"
【发布时间】:2015-03-09 03:12:15
【问题描述】:

每次我运行 rake db:migrate 我都会得到以下输出:

  ActiveRecord::SchemaMigration Load (0.9ms)  SELECT "schema_migrations".* FROM "schema_migrations"
  ActiveRecord::SchemaMigration Load (0.2ms)  SELECT "schema_migrations".* FROM "schema_migrations"

这在安装rspec-rails gem 后开始。

当我尝试运行测试时,我得到以下输出:

  ActiveRecord::SchemaMigration Load (0.4ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (0.2ms)  BEGIN
Processing by WelcomeController#index as HTML
  Rendered welcome/index.html.erb within layouts/application (0.3ms)
Completed 200 OK in 17ms (Views: 8.3ms | ActiveRecord: 3.1ms)
   (0.2ms)  ROLLBACK
.   (0.1ms)  BEGIN
Processing by WelcomeController#index as HTML
Completed 200 OK in 1ms (Views: 1.0ms | ActiveRecord: 0.0ms)
   (0.1ms)  ROLLBACK
.

Finished in 0.03 seconds (files took 1.5 seconds to load)
2 examples, 0 failures

我创建了 test_database 并运行了迁移。任何想法是什么导致了这个错误?

【问题讨论】:

    标签: ruby-on-rails postgresql ruby-on-rails-4 rspec


    【解决方案1】:

    Rspec-rails 生成了这个:它是在运行任何测试之前自动运行任何挂起的迁移的检查。它在您的/spec/rails_helpers.rb 文件中并说:

    # Checks for pending migrations before tests are run.
    # If you are not using ActiveRecord, you can remove this line.
    ActiveRecord::Migration.maintain_test_schema!
    

    将那一行保留在其中是一个非常好的主意,这样您就不会在数据库未处于良好/完整/预期状态时无意中运行测试(如果您忘记了迁移,可能会发生这种情况运行)。

    【讨论】:

    • 是的,我看到了,我没有要运行的迁移。都是最新的。
    • 您只是看到用于查看是否有任何需要运行的迁移的 SELECT 语句。它没有找到任何(SELECT 正在返回 0 条记录)。如果它确实找到了任何记录(如果 SELECT 语句找到 > 0 条记录),那么您看到一条错误消息,类似于 '.... there are migrations跑步。测试中止......' 就像 Taryn East 所说:这不是错误。您只是看到系统进行了所需的检查。你的测试通过了。
    • 所以你说这是 rspec 测试的正确输出?因为我不这么认为..
    • 您可以在 rspec-rails 的 Github 存储库中阅读有关迁移检查的更多信息。在变更日志中有一条关于它的注释:“Rails 4.x ActiveRecord::Migration 待定迁移检查”relishapp.com/rspec/rspec-rails/docs/… SELECT 语句困扰您什么? (我不是要争论;我是想了解你的观点以及为什么它看起来对你很可疑。)
    • 只是因为它现在正在记录 SELECT 语句,这让我感到怀疑。我能够修改rails_helper 以在运行测试时停止显示 ActiveRecord 查询。此外,运行 1.5 秒的测试速度非常慢。
    【解决方案2】:

    tl;dr 这不是错误

    schema_migrations 是一个表,rails 存储它为当前环境的数据库运行的所有迁移的版本号。

    它会在迁移数据库时始终检查这一点(在规范之前它也会这样做),以查看是否有任何尚未为此数据库运行的未决迁移。

    【讨论】:

    • 好吧,也许不是错误,但我该如何修复我的测试输出?它可能不是错误,但也无法正常运行。如果迁移是最新的,从技术上讲,当我运行 rake db:migrate 时不会发生任何事情。
    • 没有什么可修复的...这正是您运行 rake db:migrate 时应该发生的情况 - rails 检查迁移集以查看哪些迁移已运行.您最近可能更改了环境中的日志记录级别吗?如果是这样 - 您现在会看到一直在发生的事情,只是之前没有记录过
    • 我没有更改任何日志记录事件:“您最近可能更改了环境中的日志记录级别”这就是为什么我怀疑有些不对劲...
    • 是的,正在努力……只是反射评论……不要让你挂……谢谢!
    猜你喜欢
    • 2013-12-05
    • 2017-07-08
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 2016-02-21
    相关资源
    最近更新 更多