3

我要让基准测试,但是当我运行轨测试和开发数据库都在不同的架构

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 

还当我备份的开发数据库,​​并用它我采取的错误恢复测试数据库。我认为数据库模式的不同,但我不知道如何去做。谢谢

回答

1

当你运行测试:基准重新加载从架构的测试数据库。

貌似是缺少“较真”表。这是在你的模式文件?

您也可以尝试连接到测试环境中看到,DB的那种状态:

rails console test 
+0

当我运行耙测试:基准我仍然这个错误。当我打开测试控制台,检查“竞赛”的模式是没有问题的。真奇怪。 – eyupatis

0

不太清楚这是否会解决这个问题,但似乎你只迁移开发数据库。 Rails通常有3个环境,即生产,开发和测试。

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

运行rake db:migrate仅迁移发展的数据库。如果你想迁移测试数据库,你必须告诉rake运行哪个环境。 RAILS_ENV=test是告诉Rails该环境下运行的任务的方式

从你的错误的外观,它看起来好像在你的测试数据库中不存在的表,所以我的建议是尝试运行。

rake db:migrate RAILS_ENV=test

+0

如果你能怎么这个答案扩大这将是有益的。 – pjmorse

+0

@pjmorse扩大:) – chris

+0

谢谢!现在对其他人发现这个问题更有帮助。 – pjmorse

相关问题