rails测试和开发数据库采用不同的模式

时间:2013-05-30 14:12:58

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

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

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

当我备份开发数据库并使用它恢复测试数据库时,我会收到错误。我认为数据库架构不同但我不知道如何做同样的事情。谢谢

2 个答案:

答案 0 :(得分:1)

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

看起来缺少“竞赛”表。那是你的架构文件吗?

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

rails console test

答案 1 :(得分:0)

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

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

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

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

rake db:migrate RAILS_ENV=test