我想进行基准测试,但是当我运行时
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
当我备份开发数据库并使用它恢复测试数据库时,我会收到错误。我认为数据库架构不同但我不知道如何做同样的事情。谢谢
答案 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