我有一个非常奇怪的错误,希望这里有人能提供帮助。我已经将一个形状文件导入到我的 rails postgis 数据库中。它包含以下列:
- 搜索
- 资源
- 搜索2
- 重复
- 几何
geom 列包含一个 RGeo MultiPolygon 坐标。
奇怪的是我的本地 Rails 应用程序在读取所有记录 geom 字段时没有问题,但是我的生产服务器有一些记录在 geom 字段中为零。
这两个应用程序在 git 中具有完全相同的代码,并且正在查看完全相同的数据库。
这两个应用程序之间的唯一区别是我的本地应用程序在 OSX 上运行,而生产在 Ubuntu 12.04 上运行。
以下是一些有助于诊断问题的代码片段:
配置/数据库.yml
development:
adapter: postgis
encoding: unicode
database: coflood_production
host: opensource1
port: 5432
pool: 5
username: xxxxxxx (hidden)
password: xxxxxxx (hidden)
应用程序/模型/地名词典.rb
class Gazetteer < ActiveRecord::Base
self.table_name = 'gazetteer'
self.primary_key = 'gid'
attr_accessible :geom, :search, :search2, :source
end
宝石文件
source 'https://rubygems.org'
gem 'rails', '3.2.13'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'pg', '0.17.1'
gem 'activerecord-postgis-adapter', '0.6.5'
gem 'devise', '3.2.2'
gem 'rgeo-geojson', '0.2.3'
gem 'js-routes', '0.9.6'
gem 'annotate', '2.5.0'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', :platforms => :ruby
gem 'uglifier', '>= 1.0.3'
gem "therubyracer", '0.12.0'
gem "less-rails", '2.4.2' #Sprockets (what Rails 3.1 uses for its asset pipeline) supports LESS
gem "twitter-bootstrap-rails", '2.2.8'
end
gem 'jquery-rails', '3.0.4'
如果您能想到任何其他有用的东西,请告诉我,我会尽快提供。
更新 1
因此,我在两个系统上安装 postgresql 和 postgis 的方式存在差异。在 OSX(本地)上,我安装了 opengeo 软件套件,其中包含我需要的所有组件。在 Ubuntu(生产)上,我使用 apt-get 安装了 postgresql-9.3。
感谢这里的评论,我注意到我没有在生产服务器上安装一些东西,比如 geos 和 gdal。我都安装了,不幸的是仍然有同样的错误。
更新 2
所以我决定尝试让生产服务器与我的本地机器接近相同的环境,看看这是否能解决我的问题。我删除了 postgres/postgis/geos 的 apt 安装并安装了 Ubuntu opengeo 软件套件。这是我在本地机器上使用的。
不幸的是,这并没有解决问题。
然后我注意到我使用的是不同版本的 ruby。所以我更新了我的生产服务器以使用相同的版本(ruby 2.0.0p247)。
仍然没有解决错误。
我仍然对这个错误感到困惑。看来这一定与 rails、rgeo 或 activerecord-postgis-adapter gem 有关。
更新 3
因此,我注意到两个系统上的几何记录之间存在差异。我查看了数据库中的第一条记录,在 geom 字段中都有几何,但是平台之间的 Rgeo 类型不同。
本地服务器 (OSX)
RGeo::Geos::CAPIMultiPolygonImpl:0x3fc7af864fdc "MULTIPOLYGON ..."
生产服务器(Ubuntu 12.04)
RGeo::Geographic::SphericalMultiPolygonImpl:0x1b07a4c "MULTIPOLYGON ..."
似乎无法将 RGeo::Geographic 对象转换为 RGeo::Geos 坐标。