2016-05-24 8 views
0

Ich habe eine Rails-Anwendung mit Postgres-Datenbank erstellt. Ich benutze Postgis-Erweiterung für Geo-Abfragen. Die App wird erfolgreich auf meinem (lokalen) Entwicklungscomputer ausgeführt, aber nach dem Bereitstellen meines Codes auf dem Heroku-Server, wenn ich heroku run rake db:migrate ausführen, wird ein Fehler ausgegeben, der besagt: . Ich habe Geometrie-Datentyp in einigen Migrationen zum Speichern von Breite und Länge.undefined Methode `Geometrie 'für ActiveRecord :: ConnectionAdapters :: PostgreSQL

Beachten Sie, dass ich auch PostGIS extension auf Heroku erstellt habe. Und Migrationen, die keinen Geometrie-Datentyp enthalten, wurden erfolgreich ausgeführt. Meine Dateien sind:

Gemfile

ruby "2.3.0" 
gem 'rails', '>= 5.0.0.beta3', '< 5.1' 
gem 'pg', '~> 0.18' 
gem 'rgeo' 
gem 'rgeo-activerecord', "~> 5.0.0.beta" 
gem "activerecord-postgis-adapter", "~> 4.0.0.beta2" 

psql --Version ist: 9.5.2 auf Heroku Server

psql --Version ist: 9.4.7 auf lokalen Server

Datenbank.

create_cities Migration

def change 
    create_table :cities do |t| 
     t.string :name 
     t.references :state, foreign_key: true 
     t.geometry :lat_lan 
end 

heroku run rake db:migratehält hier nur.

Ich bin total verwirrt, ob ich unpassende Edelsteine ​​verwendet habe oder ich etwas falsch konfiguriert habe. Bitte helfen Sie!

Antwort

0

Sie müssen postgresql durch postgis in Ihrer database.yml Datei für die Adapteroption ersetzen.

z.

default: &default 
    adapter: postgis 
    encoding: unicode 
    pool: <%= ENV["DB_POOL"] || ENV['MAX_THREADS'] || 5 %> 
    url: <%= ENV['DATABASE_URL'] %> 

development: 
    <<: *default 
    database: yourapp_development 
+0

Wenn Sie sehen, habe ich das schon getan. – Imran

+0

Und Sie haben immer noch das Problem? – coorasse

+0

Ja, nachdem ich das getan habe, habe ich immer noch das Problem – Imran

1

Wenn die Variable DATABASE_URL Umgebung mit Hilfe der Datenbank-Verbindungszeichenfolge setzen, sicherzustellen, dass es den postgis hat: // (nicht Postgres: //) Präfix.

dh. postgis://username:[email protected]_server_url:5432/dbname

1

url: <%= ENV.fetch('DATABASE_URL', '').sub(/^postgres/, 'postgis') %>

EDIT: Es ersetzt das URL-Schema postgres://somewhere.com zu postgis://somewhere.com. Es ändert sich zum GIS "Protokoll", wie http zu https zu ändern.

+0

Vielen Dank für dieses Code-Snippet, das einige sofortige Hilfe bieten kann. Eine richtige Erklärung [würde erheblich verbessern] (// meta.stackexchange.com/q/114762) ihren pädagogischen Wert, indem sie * warum * dies eine gute Lösung für das Problem ist, und es für zukünftige Leser mit ähnlichen, nützlicher machen würde, aber nicht identisch, Fragen.Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen und geben Sie an, welche Einschränkungen und Annahmen gelten. –

Verwandte Themen