Für mein Unternehmen muss ich einige Funktionen gegen die REST-API meiner Discourse-Instanz entwickeln. Für die lokale Entwicklung und das Testen habe ich Install Discourse for development using Docker erfolgreich seit einiger Zeit befolgt.
Es ist ein paar Wochen her, seit ich zuletzt entwickelt habe. Gestern wollte ich Discourse wieder lokal starten, also habe ich mein übliches git pull && d/boot_dev && d/bundle install && d/rails s ausgeführt. Der letzte Befehl d/rails s schlägt jedoch mit folgendem Fehler fehl:
URGENT: Failed to initialize site default: ActiveRecord::ConnectionNotEstablished connection to server on socket \"/var/run/postgresql/.s.PGSQL.5432\" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
/home/discourse/.bundle/gems/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:69:in `rescue in new_client'
[... ]
Wenn ich ein Terminal in den discourse_dev-Container öffne und ls -la /var/run/postgresql/ ausführe, sehe ich, dass dort tatsächlich kein .s.PGSQL.5432-Socket vorhanden ist.
Ok, ich dachte, ich hätte vielleicht nicht blindlings zuerst git pull ausführen sollen, also habe ich Tag v4.4.0 und sogar Tag v3.3.0 ausgecheckt und es erneut versucht. Aber ich erhalte genau denselben Fehler.
Es scheint mir, als ob die Postgres-Datenbank nicht innerhalb des discourse_dev-Containers läuft?
Das Seltsame ist: Wenn ich das Discourse-Repository in einen neuen Ordner klone (ja, sogar den neuesten Code im main-Branch) und Discourse mit Docker starte, erhalte ich diesen Fehler nicht und Discourse startet erfolgreich. Aber natürlich habe ich dann eine leere Datenbank, was etwas unglücklich ist. Ich verstehe, dass die Daten in tmp/postgres gespeichert werden, was ich aus dem alten Ordner in den neuen kopieren kann. Aber das kann ich nicht mehr tun, weil ich das gestern nicht wusste und bei meinen gestrigen Fehlerbehebungsversuchen jeden temporären Ordner und die node_modules und den .pnpm-store-Ordner usw. gelöscht habe. Aber das Problem besteht weiterhin.
Hat jemand eine Ahnung, was hier passiert oder was ich tun kann, um das zu beheben?
Es scheint, als ob mit meinen lokalen Daten etwas völlig kaputt ist, das den Start von PostgreSQL verhindert.
Wenn ich sudo cp -pr discourse/data/postgres discourse2/data/postgres ausführe, erhalte ich genau das gleiche Problem beim Starten von Discourse aus dem Ordner discourse2. Umgekehrt, wenn ich discourse/data/postgres lösche, startet meine ursprüngliche Discourse-Instanz einwandfrei, aber natürlich ohne Daten
Entschuldigen Sie die Umstände. Dies war wahrscheinlich auf das kürzliche Update von PostgreSQL 15 zurückzuführen: PostgreSQL 15 update. Die alten PG 13-Datendateien sind mit dem discourse_dev-Image, das jetzt PG 15 ausführt, nicht kompatibel, aber unser automatisches Datenbank-Update-Verfahren war nicht für Entwicklungsumgebungen gedacht.
Gibt es einen bestimmten Grund, warum Sie die alten Datendateien behalten möchten?
Sie können rake dev:populate im Container ausführen, um einige Testdaten zu generieren.
Oh, das ergibt so viel Sinn. Vielen Dank für die Erklärung. TIL, dass es sowieso eine schlechte Idee ist, blind einen git pull auf dem main-Branch zu machen, da so viel unbeabsichtigt kaputt gehen kann
Nur wegen einiger Admin-Einstellungen, insbesondere in Bezug auf Discourse Connect. Auch einige REST-API-Einstellungen, einige Plugin-Einstellungen und einige spezifische manuelle Benutzergruppen. Wir haben ein besonderes SSO-Setup, das Kategorien und Benutzergruppen (+ Gruppenmitgliedschaften) über die REST-API verwaltet. Tatsächliche Inhalte wie Beiträge und Antworten sind mir während der Entwicklung egal, weshalb rake dev:populate mir vermutlich nicht helfen würde.
Vielen Dank für Ihre konstruktive Antwort! Das wird hilfreich sein, wenn meine Kollegen und ich unsere lokale Discourse-Instanz auf eine Version später als 3.4.0 aktualisieren.
Vorerst habe ich jedoch mit einem neuen Datensatz begonnen und die notwendige Konfiguration erneut angewendet. Glücklicherweise hatten wir bereits eine interne Anleitung, die unsere Entwicklerkollegen anleitet, wie sie mit der Entwicklung gegen Discourse beginnen können