Discourse mit Postgres in Docker ausführen

Hallo

Ich versuche, Discourse in meiner lokalen Entwicklungsumgebung mit nur einem kleinen Unterschied einzurichten: Ich betreibe Postgres in Docker.
Die Datenbank ist über psql vom Betriebssystem aus zugänglich, aber als ich versuchte, die Datenbank mit Rake oder Rails zu erstellen, funktionierte es nicht. Ich habe diese Schritte befolgt:

cp discourse_defaults.conf discourse.conf

dann habe ich discourse.conf aktualisiert

...
db_host = 127.0.0.1
...
db_username = postgres
db_password = mysecretpassword
...

Aber wenn ich versuche, db:create auszuführen

Verbindung zum Server auf dem Socket „/var/run/postgresql/.s.PGSQL.5432“ fehlgeschlagen: Datei oder Verzeichnis nicht gefunden

Läuft der Server lokal und akzeptiert Verbindungen über diesen Socket?
„discourse_development“-Datenbank konnte nicht erstellt werden. Bitte überprüfen Sie Ihre Konfiguration.
rails abgebrochen!
ActiveRecord::NoDatabaseError: Verbindung zum Server auf dem Socket „/var/run/postgresql/.s.PGSQL.5432“ fehlgeschlagen: Datei oder Verzeichnis nicht gefunden

Läuft der Server lokal und akzeptiert Verbindungen über diesen Socket?


Verursacht durch:
PG::ConnectionBad: Verbindung zum Server auf dem Socket „/var/run/postgresql/.s.PGSQL.5432“ fehlgeschlagen: Datei oder Verzeichnis nicht gefunden

Läuft der Server lokal und akzeptiert Verbindungen über diesen Socket?

Aufgaben: TOP => db:create
(Vollständige Spur durch Ausführen der Aufgabe mit --trace anzeigen)

Ich habe es mit .env versucht

DISCOURSE_DB_HOST=127.0.0.1
DISCOURSE_DB_USERNAME=postgres
DISCOURSE_DB_PASSWORD=mysecretpassword

Ich habe auch verschiedene IP-Adressen für ‘DB_HOST’ ausprobiert, aber ich erhalte immer noch dieselbe Fehlermeldung.
Fehlt mir etwas?

Ich bin mir nicht sicher, aber ich glaube, das Problem ist wahrscheinlich, dass Discourse in einem Docker-Container läuft und daher standardmäßig nicht auf Ihren separaten Postgres-Container zugreifen kann.

Ich glaube, Sie müssen die Datenbank mit dieser Art von Konfiguration verfügbar machen: GitHub - discourse/discourse_docker: A Docker image for Discourse

Möglicherweise müssen Sie auch die Postgres-Vorlage aus der app.yml-Datei entfernen.

Diese Dokumentation könnte hilfreich sein – obwohl Sie nicht auf einem separaten Server laufen, sollte alles andere relevant sein.

Ich hoffe, das hilft!

Hallo @phil22

Vielen Dank für Ihre Antwort.

Discourse läuft nicht in einem Docker-Container, sondern in meinem Betriebssystem. Postgres läuft in einem Container und ich habe seinen Port für das Betriebssystem freigegeben -p 5432:5432.

Das bedeutet, dass Discourse versucht, über einen Dateisystem-Socket eine Verbindung herzustellen, und dieser Socket existiert nicht.

Können Sie versuchen, port: 5432 zur Datei config/database.yml unter dem Abschnitt development hinzuzufügen?

Hallo @Falco
danke für deine Antwort.
Dasselbe

Verbindung zum Server auf Socket "/var/run/postgresql/.s.PGSQL.5432" fehlgeschlagen: Datei oder Verzeichnis nicht gefunden
Ist der Server lokal ausgeführt und akzeptiert Verbindungen über diesen Socket?
'discourse_development'-Datenbank konnte nicht erstellt werden. Bitte überprüfen Sie Ihre Konfiguration.
rails abgebrochen!
ActiveRecord::NoDatabaseError: Verbindung zum Server auf Socket "/var/run/postgresql/.s.PGSQL.5432" fehlgeschlagen: Datei oder Verzeichnis nicht gefunden
Ist der Server lokal ausgeführt und akzeptiert Verbindungen über diesen Socket?


Verursacht durch:
PG::ConnectionBad: Verbindung zum Server auf Socket "/var/run/postgresql/.s.PGSQL.5432" fehlgeschlagen: Datei oder Verzeichnis nicht gefunden
Ist der Server lokal ausgeführt und akzeptiert Verbindungen über diesen Socket?

Aufgaben: TOP => db:create
(Vollständige Spur anzeigen, indem die Aufgabe mit --trace ausgeführt wird)

Okay, versuchen Sie, diese Zeile hinzuzufügen:

  url: postgresql://postgres::postgres@localhost:5432/discourse_development?pool=5

anstelle der Zeile mit dem port.

Danke @Falco
Ich habe versucht, alle fehlenden Informationen zur database.yml hinzuzufügen, und jetzt funktioniert es

#cat database.yml 
development:
  prepared_statements: false
  adapter: postgresql
  database: <%= ENV['DISCOURSE_DEV_DB'] || 'discourse_development' %>
  min_messages: warning
  port: 5432
  host: localhost
  user: postgres
  password: mysecretpassword
  pool: 5
  timeout: 5000

Bedeutet das, dass es ein Problem beim Laden der Konfigurationsvariablen gibt?

Nein, das bedeutet nur, dass der Standard-socket Vorrang vor der port-Deklaration hat. Eine Möglichkeit, dies zu umgehen, ist die Verwendung des url-Schlüssels, aber Sie können den Rails-Code überprüfen, um andere Wege zu sehen.

2 „Gefällt mir“