Antworten:
AKTUALISIERT
Ursprünglich wurde in dieser Antwort angegeben, dass dies zwar mit wenigen Tricks möglich war, jedoch stark davon abgeraten wurde. Dies beruhte auf Ratschlägen auf der Heroku-Entwickler-Support-Website. Kürzlich veröffentlichte Heroku jedoch eine Mitteilung, in der speziell beschrieben wurde, wie dies erreicht werden kann, und verwässerte ihre Ratschläge auf der Entwicklerseite. Der vollständige Text dieses Abschnitts ihrer E-Mail ist unten enthalten:
Wussten Sie, dass Heroku-Apps eine gemeinsame Datenbank gemeinsam nutzen können? Beispielsweise können Sie Analysefunktionen in einer von Ihrem benutzerbezogenen Code getrennten Anwendung ablegen.
Setzen Sie einfach die Konfigurationsvariable DATABASE_URL für mehrere Apps auf denselben Wert. Holen Sie sich zunächst die DATABASE_URL für Ihre vorhandene App:
$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute1.amazonaws.com/ldfoiusfsf
Setzen Sie dann die DATABASE_URL für neue Apps auf diesen Wert:
$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf --app sushi-analytics Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf Restarting app... done, v74. That's it
- Jetzt teilen sich beide Apps eine Datenbank.
Als Referenz diente Herokus ursprünglicher Rat, eine API für den Remotezugriff auf Daten zu erstellen und zu verwenden. Meine persönliche Ansicht ist, dass dies in vielen Situationen insgesamt ein guter Rat ist (dh besser als nur mehrere Anwendungen mit derselben Datenbank zu verbinden), obwohl ich Situationen sehen kann, in denen dies mehr Probleme verursachen würde, als es wert ist.
AKTUALISIEREN
Gemäß den Kommentaren zu dieser Antwort ist es erwähnenswert, dass Heroku sich das Recht vorbehält, Datenbank-URLs nach Bedarf zu ändern. In diesem Fall schlagen Ihre sekundären Verbindungen fehl und Sie müssen die URLs entsprechend aktualisieren.
Aktuelle Antwort auf die relevante Frage!
Heroku unterstützt jetzt offiziell eine bessere / elegantere Lösung durch das Addon-Framework. In ihrem neuesten Newsletter wird beschrieben, wie Addons zwischen Apps ausgetauscht werden können. Nachfolgend sind die in der Beschreibung erwähnten Ausschnitte aufgeführt:
$ heroku addons:attach my-sushi-db -a my-sushi-reporting --as MAIN_SUSHI_DB
Adding MAIN_SUSHI_DB to my-sushi-reporting... done
Setting MAIN_SUSHI_DB vars and restarting my-sushi-app-reporting... done, v3
heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
Soweit ich weiß, ist dies möglich. Sie müssen die Heroku-Konfigurationsvariablen für Ihre App mit der Datenbank überprüfen und dann die Datenbank-URL für die App festlegen, die die Datenbank für denselben Wert freigeben möchte. Ein bisschen aus der Bahn und wie unterstützt es ist, weiß ich nicht.
BEARBEITEN Um mich zu beruhigen, habe ich zwei Apps auf Heroku gestartet - einen einfachen Gerüst-Beitrag mit einem Titel.
http://evening-spring-734.heroku.com/posts ist der Meister
http://electric-galaxy-230.heroku.com/posts - ist der Sklave
Auf beiden erstellte Beiträge werden also in die Datenbank-URL von night-spring-734 geschrieben.
Ich habe nur die Heroku-Konfiguration verwendet, um die DATABASE_URL von Abend-Frühling-734 abzurufen und dann den gleichen Wert in die DATABASE_URL von Elektro-Galaxie-230 zu setzen.
Sie könnten mit einigen fruchtigen DB-Rennbedingungen enden, aber das ist definitiv möglich.
Magie, oder?
Ich habe dies kürzlich im Heroku-Newsletter erhalten. Ich sende ihnen eine E-Mail, um herauszufinden, ob es sich wirklich um eine genehmigte Verwendung handelt.
WUSSTEST DU?
Eine Datenbank mit vielen Apps teilen
Wussten Sie, dass Heroku-Apps eine gemeinsame Datenbank gemeinsam nutzen können? Beispielsweise können Sie Analysefunktionen in einer von Ihrem benutzerbezogenen Code getrennten Anwendung ablegen.
Stellen Sie einfach die
DATABASE_URL
Konfigurationsvariable für mehrere Apps auf den gleichen Wert ein. Holen Sie sich zunächst dieDATABASE_URL
für Ihre vorhandene App:$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf
Stellen Sie dann
DATABASE_URL
für neue Apps diesen Wert ein:$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf --app sushi-analytics Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf Restarting app... done, v74.
Das war's - jetzt teilen sich beide Apps eine Datenbank.
Das Amazon RDS-Plugin funktioniert hierfür gut. Mehrere Apps können dieselbe RDS-Instanz gemeinsam nutzen.
Sie haben die Flexibilität, Tabellen gemeinsam zu nutzen oder eine Kollision mit Tabellennamen mithilfe des Präfixes active_record.table_name_prefix zu vermeiden.
Siehe Heroku-Referenz: https://devcenter.heroku.com/categories/heroku-postgres
F: Können mehrere Heroku-Anwendungen eine Verbindung zu einer einzigen Datenbank herstellen?
Ja. Sie können mehrere Anwendungen, die auf Heroku ausgeführt werden, für die Verbindung mit einer einzelnen Datenbank konfigurieren, sofern Sie über die Anmeldeinformationen der Datenbank verfügen. Überschreiben Sie einfach die DATABASE_URL der Apps, die Sie mit der Heroku-Konfiguration verbinden möchten: Fügen Sie den Befehl DATABASE_URL = ... hinzu.