1

我有一个非常奇怪的错误,希望这里有人能提供帮助。我已经将一个形状文件导入到我的 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 坐标。

4

0 回答 0