2016-07-21 9 views
1

Ich habe mehrere Versionen von PostgreSQL auf meinem Rechner (Ubuntu Trusty läuft).Postgres-Version in ActiveRecord-Konfiguration angeben

$ service postgresql status 
9.1/main (port 5433): online 
9.5/main (port 5432): online 

Ich betreibe mehrere Ruby-Anwendungen mit Activerecord, die jeweils mit unterschiedlichen Versionen von Postgres sind, und ich möchte in der Lage, die Postgres Version in database.yml, so etwas zu spezifizieren:

default: &default 
    adapter: postgresql 
    encoding: utf8 
    version: 9.1 
    # ... or, since this seems to be close to pg_wrapper's syntax: 
    cluster: 9.1/main 

Was ich nicht möchte, muss port: 5433 angeben, da das wahrscheinlich für jede Version auf jeder Maschine anders ist, auf der es läuft. Gibt es eine Möglichkeit, dies zu tun?

+0

Warum sollten Datenbankverbindungsdetails in der Versionskontrolle an erster Stelle bleiben? IMO '. gitignore' es und lass es alle mit ihren eigenen Details ausfüllen oder 'DATABASE_URL' in der Umgebung setzen. –

+0

Ja, großartig, denn sie sind alle * sicher *, um alle Details richtig zu machen. – PJSCopeland

+0

Sie kennen ihre Maschinen wahrscheinlich besser, oder? Soweit ich weiß, ist dieses Cluster-Ding Debian-spezifisch. Erwarten Sie, dass alle auf Debian (oder Derivaten wie Ubuntu) stehen? Beachten Sie außerdem, dass 'pg_wrapper' nur die Dienstprogramme betrifft, die Rails nicht verwendet (wahrscheinlich mit Ausnahme von' pg_dump' für das Schema in SQL). –

Antwort

1

Sie können Umgebungsvariablen in Ihrem database.yml setzen ein bisschen ERB mit:

default: &default 
    adapter: postgresql 
    encoding: utf8 
    port: <%= ENV['POSTGRESQL_91_PORT'] %> 

Auf diese Weise Ihre database.yml Dateien identisch auf verschiedenen Maschinen sind, und Sie müssen nur einige maschinenspezifische Umgebungseinstellungen einrichten .

+0

Hmmm ... Aber ich möchte es einmal im Repository haben, also muss ich es nicht auf jeder Maschine einrichten. – PJSCopeland

+0

Ich glaube nicht, dass Sie können, Rails wird nicht wissen, wie man herausfinden kann, welche Versionen von PostgreSQL laufen und welche Ports sie auf einem beliebigen Rechner verwenden. Angenommen, Sie haben eine Ubuntu-Box, eine Debian-Box, ein paar Macs, wie erwarten Sie, dass Rails weiß, was wo läuft? Umgebungsvariablen sind die Standardmethode für diese Art von Dingen. Die meisten Apps, die ich erstelle, enden mit einer Handvoll Umgebungsvariablen, um mit den Unterschieden zwischen verschiedenen Entwicklern, Staging-Servern und Produktionsservern umzugehen. –

+0

Nun, wie ich schon erwähnt habe, gibt es 'pg_wrapper'. Jedes Postgres-Befehlszeilenskript kann die Option '--cluster = 9.1/main' verwenden und den richtigen Dienst auswählen. Warum nicht ActiveRecord's Adapter? – PJSCopeland