Rails测试数据库在地理列上获取错误的列类型

时间:2013-05-21 23:22:13

标签: ruby-on-rails postgresql ruby-on-rails-3.2 postgis

我们有一个使用postgis和activerecord-postgis-adapter进行地理信息搜索的rails应用程序。但是,它在测试数据库中无法正常工作。在开发和生产数据库中,地理列的类型为“geography(Point,4236)”。在测试中,那些相同的列具有“几何”类型。这意味着地理搜索不会形成球形地理距离......它们只是做普通的笛卡尔几何,这意味着数字通常偏差约100,000。嘘声。

以下是 schema.rb:

中的内容
create_table "buyers", :force => true do |t|
  # snip 
  t.spatial  "geocoded_coordinates",    :limit => {:srid=>4326, :type=>"point", :geographic=>true}
end

在database.yml中:

development: &development
  adapter: postgis
  database: lvs_dev
  username: postgres
  host:     "lrd-db"
  template: template_postgis

test:
  <<: *development
  database: lvs_test

数据库中的结果列(通过psql):

lvs_dev:

lvs_dev=# \d+ buyers
Table "public.buyers"
# snip
geocoded_coordinates    | geography(Point,4326)       |                                                      | main     |

lvs_test:

lvs_dev=# \d+ buyers
Table "public.buyers"
# snip
geocoded_coordinates    | geometry                    |                                                      | main     |

那么......这里给出了什么?有关rails / rake在开发和测试中创建不同数据库模式的想法吗?

1 个答案:

答案 0 :(得分:1)

您是否尝试删除并重新创建测试数据库,然后再次运行迁移?另外,检查它是否从某个地方的架构重新加载测试数据库,而不是运行迁移。