在测试环境中未启用Postgresql扩展

Sta*_*ers 3 postgresql rspec ruby-on-rails

我有一个postgres表,其中包含一个名为shape的多边形列.为了确定一个点是否在我内部运行

select * from areas where shape @> point '(1,1)';
Run Code Online (Sandbox Code Playgroud)

这一切都很好并且在我的ruby on rails app上工作,但它在我的RSpec测试中失败了.当我查看我的日志时,我发现此错误为源

 PGError: ERROR:  operator does not exist: character varying @> point
 HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

使用数据库工作的所有其他50多个测试,只有这一个保释.它再次适用于代码和控制台.测试环境都已正确设置.

我的问题: - 如何将比较科目投入工作? - 为什么它只会在测试中失败?

Fre*_*ung 5

默认情况下,activerecord使用schema.rb使测试数据库与开发数据库保持同步.Schema.rb是数据库独立的(它使用与迁移相同的结构),但另一方面是它不支持数据库可能具有的所有花里胡哨,特别是像Postgres这样增加了许多额外的东西.

您可以设置config.active_record.schema_format:sql使用数据库自​​己的工具生成.sql文件,rails将丢失而不是schema.rb.您将无法针对不同的数据库运行测试,但如果您使用的是postgres特定的扩展,那么无论如何您都处于该场景中.

另一种可能性是增强活动记录的模式转储器以理解多边形列.外国人gem为schema.rb添加了外键支持