Рельсы с PostGIS

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

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

Проблема заключается в том, что первая из nofxx работает хорошо, но она не обеспечивает rake-задачи, поэтому postgis.sql и spaces_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)

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

self.rgeo_factory_generator = RGeo::Geos.factory_generator

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

Итак, чтобы найти решение, есть два способа: найти способ получить задачи рейка в жемчужине nofxx или решить проблему с помощью factory адаптера activerecord-postgis.

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

Ответ 1

Наконец, я решил это самостоятельно. Я играл с рейк-задачами, и я столкнулся с некоторыми проблемами (например, вы не можете предоставить пароль от script с 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 добавляются! Да!

Ответ 2

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