【问题标题】:rails test and development databases are in different schemarails 测试和开发数据库在不同的模式中
【发布时间】:2013-05-30 14:12:58
【问题描述】:

我想进行基准测试,但是当我运行时

rake test:benchmark

我遇到了这种错误

ActiveRecord::StatementInvalid: PG::Error: ERROR:  relation "contests" does not exist
LINE 5:              WHERE a.attrelid = '"contests"'::regclass
                                      ^
:             SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                   pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
            FROM pg_attribute a LEFT JOIN pg_attrdef d
              ON a.attrelid = d.adrelid AND a.attnum = d.adnum
           WHERE a.attrelid = '"contests"'::regclass
             AND a.attnum > 0 AND NOT a.attisdropped
           ORDER BY a.attnum

一定是迁移错误。但是当我运行时

rake db:migrate

任何事情都会发生。我删除了测试数据库并运行

rake db:test:clone

之后再次运行基准测试,但它仍然给出错误。

我的 database.yml 文件是这样的

development:
      adapter: postgresql
      encoding: unicode
      host: localhost
      database: dummy_development
      pool: 5
      username: postgres
      password: dum

    test:
      adapter: postgresql
      encoding: unicode
      host: localhost
      database: dummy_test
      pool: 5
      username: postgres
      password: dum

    production:
      adapter: postgresql
      encoding: unicode
      host: localhost
      database: dummy_production
      pool: 5
      username: postgres
      password: dum

当我备份开发数据库并用它恢复测试数据库时,我也会出错。我认为数据库架构不同,但我不知道如何做到这一点。谢谢

【问题讨论】:

    标签: ruby-on-rails database ruby-on-rails-3 performance postgresql


    【解决方案1】:

    不太确定这是否能解决问题,但您似乎只是迁移了开发数据库。 Rails 通常有 3 个环境,生产、开发和测试。

    当您运行rake test:benchmark 或任何rake test 时,它使用的是database.yml 中定义的测试数据库。

    运行rake db:migrate 只会迁移数据库以进行开发。如果要迁移测试数据库,必须告诉 rake 在哪个环境中运行。 RAILS_ENV=test 是告诉 Rails 在哪个环境中运行任务的方法。

    从您的错误来看,您的测试数据库中似乎不存在这些表,所以我的建议是尝试运行:

    rake db:migrate RAILS_ENV=test

    【讨论】:

    • 如果您可以扩展它如何回答问题,那将会很有用。
    • 谢谢!对现在发现这个问题的其他人更有帮助。
    【解决方案2】:

    当您运行 test:benchmark 时,它会从架构中重新加载测试数据库。

    “比赛”表好像不见了。是在你的架构文件中吗?

    您也可以尝试连接到测试环境以查看该数据库的状态:

    rails console test
    

    【讨论】:

    • 当我运行 rake test:benchmark 时,我仍然会出现这个错误。当我打开测试控制台并检查“竞赛”模型时没有问题。这很奇怪。
    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多