Рельсы с PostGIS - PullRequest
       296

Рельсы с PostGIS

10 голосов
/ 14 марта 2011

Прежде всего, я использую Rails3 с Ruby 1.9.2.

У меня проблема с использованием PostgreSQL с PostGIS. Я пробовал два драгоценных камня:

Проблема в том, что первый из nofxx работает хорошо, но он не предоставляет задачи rake, так что postgis.sql иatial_ref_sys.sql вставляются в базу данных. Мне это нужно, потому что это удобно и важно с помощью тестов (создайте автоматически базу данных, вставьте sql postgis и выполните миграции при запуске "rake test"). Странно то, что в README на github автор пишет что-то о помощниках PostGIS и рейковых задачах. Но они не реализованы (или я слепой).

Второй драгоценный камень, перечисленный выше, отлично предоставляет эту функциональность для рейка! Но я столкнулся с проблемой, которую не могу решить. Я следовал инструкциям в README, но каждый раз, когда я пытаюсь установить положение в пространственном столбце, я получаю следующий вывод:

ruby-1.9.2-p136 :010 > v = Venue.new :location => "POINT(102.0, 47.2)"
=> #<Venue id: nil, last_updated: nil, created_at: nil, updated_at: nil, location: nil>
ruby-1.9.2-p136 :011 > v.location
=> nil 

Как видите, я установил местоположение с помощью WKT (хорошо известный текст), но оно всегда равно нулю. Я также пытался сохранить его в базе данных, но это также ноль. Я понял, что когда я пытаюсь использовать объекты, предоставленные RGeo

RGeo::Geos.factory.point(-122, 47)

это говорит, что фабрика ноль. Таким образом, должна быть проблема с созданием фабрики, предоставленной RGeo. Как упомянуто в README activerecord-postgis-adapter, я использовал следующую строку в моей модели Venue для обеспечения этой поддержки:

self.rgeo_factory_generator = RGeo::Geos.factory_generator

но это не работает.

Таким образом, чтобы найти решение, есть два способа: найти способ вставить задачи rake в georuby gem nofxx или решить проблему с фабрикой activerecord-postgis-adapter.

Надеюсь, кто-нибудь может мне помочь, ТНХ!

Ответы [ 2 ]

13 голосов
/ 21 октября 2012

Я потратил около 4 часов на решение той же проблемы с «activerecord-postgis-adapter». Ответ прост: «НИКОГДА НЕ ПОЛЬЗУЕТСЯ КОМАСАМИ В ВКТ». В вашей ситуации это должно быть v = Venue.new :location => "POINT(102.0 47.2)" Тогда все работает просто отлично!

12 голосов
/ 15 марта 2011

Наконец я решил это сам. Я играл с граблями и столкнулся с некоторыми проблемами (например, вы не можете предоставить пароль из скрипта с помощью psql ...), который раздражал меня. Но я обнаружил, что вы можете предоставить опцию шаблона для файла database.yml . Итак, я просто написал:

development:
  adapter: postgresql
  pool: 5
  encoding: unicode
  database: myDatabase
  username: root
  password: *****
  su_username: root
  su_password: *****
  port: 5432
  template: template_postgis

test:
  adapter: postgresql
  pool: 5
  encoding: unicode
  database: myDatabase_test
  username: root
  password: *****
  su_username: root
  su_password: *****
  port: 5432
  template: template_postgis

production:
  adapter: postgresql
  pool: 5
  encoding: unicode
  database: myDatabase_production
  username: root
  password: *****
  su_username: root
  su_password: *****
  port: 5432
  template: template_postgis

Теперь каждый раз, когда я создаю свою базу данных (во время тестов и т. Д.), Все материалы PostGIS добавляются! Да!

...