1

ここの誰かが助けてくれることを願っている、本当に奇妙なバグがあります。Rails postgis データベースにシェープ ファイルをインポートしました。次の列が含まれます。

  • 探す
  • ソース
  • 検索2
  • 重複
  • ジオム

geom 列には、RGeo MultiPolygon 座標が含まれています。

奇妙なことに、私のローカル Rails アプリケーションはすべてのレコード geom フィールドを問題なく読み取ることができますが、本番サーバーには geom フィールドに nil を持つレコードがいくつかあります。

どちらのアプリケーションも git にまったく同じコードがあり、まったく同じデータベースを参照しています。

2 つのアプリの唯一の違いは、本番環境が Ubuntu 12.04 で実行されているのに対し、私のローカルは OSX で実行されていることです。

問題の診断に役立つコード スニペットを次に示します。

config/database.yml

development:
  adapter: postgis
  encoding: unicode
  database: coflood_production
  host: opensource1
  port: 5432
  pool: 5
  username: xxxxxxx (hidden)
  password: xxxxxxx (hidden)

app/models/gazetteer.rb

class Gazetteer < ActiveRecord::Base
  self.table_name = 'gazetteer'
  self.primary_key = 'gid'

  attr_accessible :geom, :search, :search2, :source
end

Gemfile

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 の適切なインストールを削除し、Ubuntu opengeo ソフトウェア スイートをインストールしました。これは、ローカルマシンで使用しているものです。

残念ながら、これで問題は解決しませんでした。

その後、別のバージョンの Ruby を使用していることに気付きました。そこで、同じバージョン (ruby 2.0.0p247) を使用するように実稼働サーバーを更新しました。

それでもエラーは解決しませんでした。

私はまだこのバグに完全に当惑しています。これは、Rails、rgeo、または activerecord-postgis-adapter gem と関係があるようです。

アップデート 3

そのため、両方のシステムでジオメトリを作成するレコードに違いがあることに気付きました。データベースの最初のレコードを調べたところ、どちらも geom フィールドにジオメトリがありましたが、プラットフォーム間で Rgeo タイプが異なっていました。

ローカル サーバー (OSX)

RGeo::Geos::CAPIMultiPolygonImpl:0x3fc7af864fdc "マルチポリゴン ..."

本番サーバー (Ubuntu 12.04)

RGeo::Geographic::SphericalMultiPolygonImpl:0x1b07a4c "マルチポリゴン ..."

RGeo::Geographic オブジェクトを RGeo::Geos 座標に変換するのに失敗しているようです。

4

0 に答える 0