4

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

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

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

4

2 回答 2

2

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

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

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

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

rake db:migrate RAILS_ENV=test

于 2014-05-06T19:11:40.937 回答
1

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

看起来“比赛”表不见了。那在您的架构文件中吗?

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

rails console test
于 2013-06-05T18:59:42.033 回答