【问题标题】:rails 3.1 db:test:prepare and "pending migrations" problemrails 3.1 db:test:prepare 和“等待迁移”问题
【发布时间】:2011-07-14 12:49:49
【问题描述】:

最近切换到 Rails 3.1.0.rc4,我无法让我们的 CI 构建运行。归结为以下简化案例:

-bash-3.2$ 回声 $RAILS_ENV 测试 -bash-3.2$ bundle exec rake db:drop db:create db:test:prepare 您有 21 个待处理的迁移: 20100628174219 初始架构 20100706175001 AddCompanyToClassifieds 20100720132917 CartItemActionMigration 20100811192506 AddJobTitleToDirectoryListings ...

如果我用bundle exec rake db:drop db:create db:migrate db:test:prepare 替换该命令,它就可以正常工作。

在深入挖掘核心db:test:prepare 任务时,db:abort_if_pending_migrations 作为先决条件。

现在我只是遗漏了一些明显的东西,还是完全没有意义?运行db:test:prepare(在标准情况下)调用db:schema:load,它执行schema.rb——其重点是在不运行所有迁移的情况下加载模式。除非所有迁移都已执行,否则无法运行(因此在 db:test:prepare 之前强制使用 db:migrate),它不会使自己完全无用吗?

我想我可以在我的 CI 构建过程中添加额外的 db:migrate,但我想知道我做错了什么。

【问题讨论】:

    标签: ruby-on-rails ruby unit-testing migration


    【解决方案1】:

    我相信db:test:prepare 不打算在 TEST 环境中运行(否则您可以自己运行db:schema:load)。通常你会在开发环境中运行db:test:prepare。检查挂起的迁移非常有用(你会知道你的同事是否在你运行之前提交了一些新的迁移并失败了一堆测试)。由于运行测试运行db:test:prepare无论如何,你应该很少需要手动运行它(当然不是为你的 CI 构建)。省略对db:test:prepare的调用。

    【讨论】:

    • 感谢您的回复,但我没有手动调用 db:test:prepare -- 这是 rake spec 的前置要求。我只是在上面手动列出了它以简化问题。 rake spec 应该在测试环境中运行,所以我很难想象 db:test:prepare 仅用于开发环境。 (事实上​​,我永远不会在开发模式下使用它,因为它会破坏我的数据。)再次感谢您的回复。
    • @David mcCullars:通读activerecord/lib/active_record/railties/databases.rakedb:test:prepare 永远不会破坏您的开发数据,并且不打算在开发环境中运行(test 命名空间中的任务在test 数据库)。我不能代表spec 任务,因为我不使用它,但听起来它也不应该在测试环境中运行。
    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多