2011-03-14 10 views
10

En primer lugar, estoy utilizando Rails3 con Ruby 1.9.2.Rieles con PostGIS

Tengo un problema al utilizar PostgreSQL con PostGIS. He intentado dos joyas:

El problema es, que el primero de nofxx funciona bien, pero no proporciona tareas de desprendimiento, de manera que el PostGIS .sql y spatial_ref_sys.sql se insertan en la base de datos. Necesito esto, porque es cómodo y esencial usar pruebas (crear automáticamente la base de datos, insertar el sql de Postgis y realizar las migraciones al ejecutar "prueba de rake"). Lo extraño es que en el README de github el autor escribe algo sobre los ayudantes de PostGIS y las tareas de rake. Pero no están implementados (o estoy ciego).

¡La segunda gema listada anteriormente proporciona esta funcionalidad para rastrillar perfectamente! Pero me encontré con un problema que no puedo resolver. He seguido las instrucciones del README, pero cada vez que intento fijar una posición sobre una columna espacial, me sale el siguiente resultado:

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 

Como se puede ver, puse una ubicación mediante WKT (conocido texto), pero siempre es nulo. También traté de guardarlo en la base de datos, pero también es nulo. me di cuenta, que cuando trato de usar los objetos proporcionados por RGEO

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

que dice, que la fábrica es nula. Por lo tanto, debe haber un problema al crear la fábrica provista por RGeo. Como se mencionó en el README del activerecord-PostGIS adaptador he utilizado la siguiente línea en mi modelo Lugar para proporcionar este apoyo:

self.rgeo_factory_generator = RGeo::Geos.factory_generator 

pero no funciona.

Para encontrar una solución, hay dos maneras: Encontrar una forma de obtener las tareas de rake en la georuby gem de nofxx, o resolver el problema con la fábrica del activerecord-postgis-adapter.

Espero que alguien me puede ayudar, thx!

Respuesta

12

Finalmente lo resolví por mi cuenta. Estaba jugando con tareas de rake y me encontré con algunos problemas (como, no se puede proporcionar una contraseña del script con psql ...) que me molestaban. Pero descubrí que puede proporcionar una opción de plantilla en el archivo database.yml. Así, acabo de escribir:

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 

Ahora, cada vez que crear mi base de datos (durante las pruebas y así sucesivamente) todas las cosas PostGIS se agrega! ¡Sí!

+4

Puede agregar una variable "script_dir" a su base de datos que ejecutará los dos scripts sql necesarios para usar postgis. Busque el activerecord-postgis-adapter para "script_dir". Lo uso y funciona muy bien. No se requiere plantilla – jevy

12

He pasado aproximadamente 4 horas resolviendo el mismo problema con "activerecord-postgis-adapter". La respuesta es simple: "NUNCA USUARIOS COMAS EN WKT". En su situación debe ser v = Venue.new :location => "POINT(102.0 47.2)" ¡Entonces todo funciona bien!