Install Discourse for development using Docker

Autsch, d/cleanup ist gefährlich. Das ist eine gute Möglichkeit, viel Docker-Arbeit zu verlieren, die überhaupt nichts mit Discourse zu tun hat…

Ich habe angefangen, einige manuelle Hacks wie die folgenden durchzuführen, die funktionierten, aber es gab immer mehr Berechtigungsprobleme, also beschloss ich, keine Brände mehr zu löschen.

mkdir app/assets/javascripts/plugins
mkdir tmp
sudo chown 1000:1000 tmp
sudo chown 1000:1000 app/assets/javascripts/plugins

Ich werde den Host-Benutzer mit einer UID von 1000 verwenden und ich wette, dass es jetzt einfach funktionieren wird, aber dies offenbart wirklich eine Schwäche in der Art und Weise, wie die Discourse-Entwicklung anscheinend durchgeführt wird.

…und ja, das hat den Trick gemacht.

Im Fall von diesem “tmp” könnte es sich um ein benanntes oder anonymes Docker-Volume handeln. Bei den Plugins könnte es nützlich sein, dieses gemountete Volume zu haben, aber die Berechtigungen des Host-Dateisystems müssten geändert werden, um Schreibvorgänge zu unterstützen.

Ich glaube nicht, dass es sicher ist anzunehmen, dass jeder Entwickler eine UID von 1000 verwenden wird.

3 „Gefällt mir“

Hallo Leute, wisst ihr, wie man die Entwicklung mit einer alten Discourse-Version ausführt? Ich weiß, dass wir in Live Discourse die Version in app.yml festlegen können. Aber ich weiß nicht, wie ich das in der Entwicklung mit Docker machen kann. Ich möchte die Entwicklung auf der letzten stabilen Version v2.7.10 ausführen. Danke für eure Hilfe.

Wechsle einfach zu diesem Branch oder Commit in Git. (So mache ich es, indem ich google
Sie müssen die Datenbank löschen, erstellen und migrieren, nachdem Sie das Downgrade durchgeführt haben.

Hallo, danke @pfaffman,

Ich habe einen frischen Git-Pull von Discourse gemacht und auf den „stable“-Version-Branch ausgecheckt. (was den Discourse v2.7.10 Tag verwendet)

Ich habe dev init ausgeführt und die E-Mail-Adresse und das Passwort des Admin-Benutzers festgelegt

d/boot_dev --init

und starte den Rails-Server, er wird auf Port 3000 lauschen

d/rails s

dann führe Ember-CLI aus

cd app/assets/javascripts/discourse
yarn
yarn run ember serve --proxy "http://localhost:3000"

Discourse-Entwicklung kann unter „http://localhost:4200“ geöffnet werden.

Ich habe jedoch ein Problem beim Einloggen als Admin-Benutzer (dem, den ich beim Ausführen von „d/boot_dev --init“ erstellt habe)

„Unbekannter Fehler“ wird auf dem Bildschirm angezeigt, mit dem folgenden Fehler unter /logs

ActiveRecord::StatementInvalid (PG::UndefinedFunction: ERROR:  function max(boolean) does not exist
LINE 1: ..._rank, MAX(user_badges.created_at) AS created_at, MAX(user_b...
                                                             ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
)
lib/freedom_patches/ams_include_without_root.rb:49:in `include!'
app/controllers/application_controller.rb:495:in `serialize_data'
app/controllers/application_controller.rb:504:in `render_serialized'
app/controllers/session_controller.rb:611:in `login'
app/controllers/session_controller.rb:337:in `create'
app/controllers/application_controller.rb:395:in `block in with_resolved_locale'
app/controllers/application_controller.rb:395:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/missing_avatars.rb:23:in `call'
lib/middleware/turbo_dev.rb:34:in `call'

Haben Sie Erfahrungen mit diesem Fehler? Oder vielleicht war mein Schritt zur Ausführung der Entwicklung in der vorherigen Version falsch?

Ich glaube, Sie müssen die Datenbank mit rm -r löschen. Ich bin mir nicht sicher, wo sie sich befindet, aber sie ist wahrscheinlich im OP.

1 „Gefällt mir“

Hallo zusammen,

Ich habe wieder alles von Grund auf neu gemacht. Alles läuft gut, ich bekomme eine makellose Entwicklungsumgebung, in die ich mich einloggen kann.

Dann füge ich ein paar Plugins hinzu, um meine Produktionsumgebung abzugleichen, und ziehe das aktuellste Backup.

Ich lade es hoch, versuche, es in der Entwicklungsumgebung wiederherzustellen, und erhalte wieder die Fehlermeldung „Peer authentication error“. Ich habe einen Fehler gemeldet, aber bisher gab es keine Reaktion. Kann jemand versuchen, das zu reproduzieren? Ich habe ähnliche Probleme weiter oben in den Kommentaren zu diesem Beitrag gesehen, daher gehe ich davon aus, dass ich nicht der Einzige bin?

[2021-11-29 19:43:39] 'koen' hat die Wiederherstellung gestartet!
[2021-11-29 19:43:39] Markiere Wiederherstellung als laufend...
[2021-11-29 19:43:39] Stelle sicher, dass /src/tmp/restores/default/2021-11-29-194339 existiert...
[2021-11-29 19:43:39] Kopiere Archiv in temporäres Verzeichnis...
[2021-11-29 19:43:39] Extrahiere Dump-Datei...
[2021-11-29 19:43:40] Validiere Metadaten...
[2021-11-29 19:43:40]   Aktuelle Version: 20211124161346
[2021-11-29 19:43:40]   Wiederhergestellte Version: 20211123033311
[2021-11-29 19:43:40] Aktiviere Nur-Lese-Modus...
[2021-11-29 19:43:40] Pausiere Sidekiq...
[2021-11-29 19:43:40] Warte bis zu 60 Sekunden, bis Sidekiq die Jobs beendet hat...
[2021-11-29 19:43:46] Erstelle fehlende Funktionen im discourse_functions Schema...
[2021-11-29 19:43:46] Stelle Dump-Datei wieder her... (dies kann eine Weile dauern)
[2021-11-29 19:43:47] psql: Fehler: Verbindung zum Server über Socket „/var/run/postgresql/.s.PGSQL.5432“ fehlgeschlagen: FATAL: Peer-Authentifizierung fehlgeschlagen für Benutzer „postgres“
[2021-11-29 19:43:47] AUSNAHME: psql fehlgeschlagen: psql: Fehler: Verbindung zum Server über Socket „/var/run/postgresql/.s.PGSQL.5432“ fehlgeschlagen: FATAL: Peer-Authentifizierung fehlgeschlagen für Benutzer „postgres“

[2021-11-29 19:43:47] /src/lib/backup_restore/database_restorer.rb:92:in `restore_dump'
/src/lib/backup_restore/database_restorer.rb:26:in `restore'
/src/lib/backup_restore/restorer.rb:51:in `run'
/src/script/spawn_backup_restore.rb:23:in `restore'
/src/script/spawn_backup_restore.rb:36:in `block in <main>'
/src/script/spawn_backup_restore.rb:4:in `fork'
/src/script/spawn_backup_restore.rb:4:in `<main>'
[2021-11-29 19:43:47] Versuche, zurückzurollen...
[2021-11-29 19:43:47] Es war kein Zurückrollen nötig
[2021-11-29 19:43:47] Räume auf...
[2021-11-29 19:43:47] Lösche Funktionen aus dem discourse_functions Schema...
[2021-11-29 19:43:47] Entferne temporäres Verzeichnis '/src/tmp/restores/default/2021-11-29-194339'...
[2021-11-29 19:43:47] Entpause Sidekiq...
[2021-11-29 19:43:47] Markiere Wiederherstellung als beendet...
[2021-11-29 19:43:47] Benachrichtige 'koen' über das Ende der Wiederherstellung...
[2021-11-29 19:43:51] Fertig!

Hallo,

Ich habe ein Problem, das anscheinend auf die Trennung zwischen den Ports 3000 und 4200 zurückzuführen ist. Ich bin mir nicht ganz sicher, wie sie miteinander zusammenhängen, aber nach meinem Verständnis ist 3000 der Server und 4200 ein Proxy dazu vom Ember CLI. Port 4200 funktioniert gut, außer dass manchmal, und speziell bei der Antwort mit einem 302, die Antwort-Header URIs enthalten, die Port 3000 anstelle von 4200 verwenden. Ich habe speziell versucht, OAuth2 mit einem benutzerdefinierten Anbieter wie hier beschrieben zum Laufen zu bringen, und die Anwesenheit von Port 3000 in einigen der Antworten bricht den OAuth2-Workflow. In meiner OAuth2-Konfiguration gibt es keinen Port 3000, er muss intern vom Server kommen.

Ist jemandem ein solches Problem schon einmal begegnet? Wissen Sie, wie man eine Umgebung einrichtet, die die Produktionsversion genauer nachahmt?

Ich habe auch versucht, die Produktionsversion lokal einzurichten, aber das erfordert eine vollwertige Domain- und E-Mail-Registrierung und scheint für lokale Umgebungen nicht sehr benutzerfreundlich zu sein.

Vielen Dank.

1 „Gefällt mir“

Update, ich habe versucht, den sauberen Weg erneut zu gehen und dieses Mal eine andere Maschine benutzt. Jetzt bleibe ich stecken, weil ich nicht die UID 1000 habe, die weiter oben in diesem Thread, Post 100 von @dcook, erwähnt wurde. Ich würde zustimmen, dass die Annahme UID=1000 falsch ist und einen Fehler darstellen würde. Haben Sie ihn als solchen gemeldet?

Auf meiner Hauptmaschine besteht der Postgress-Benutzerberechtigungsfehler weiterhin, den ich hier gemeldet habe: Backup restore failing on clean dev docker env: FATAL: Peer authentication failed for user “postgres”.

@rishabh, was ist Ihre Meinung zu beiden Punkten? Ich habe es geliebt, auf die Docker-basierte Methode umzusteigen, schnell und sauber. Aber jetzt, auf zwei verschiedenen Maschinen, fühlt es sich ein wenig wie eine Sackgasse an und ich frage mich, was ich noch tun kann, um es zu lösen. Ich frage mich auch ein wenig über den Lebenszyklus von Fehlern. Werden sie empfangen, überprüft, abgelehnt oder akzeptiert, geparkt, behoben usw.?

Ich werde jetzt versuchen, die native Entwicklungsumgebung einzurichten und zu sehen, ob ich diese zum Laufen bringen kann.

2 „Gefällt mir“

Hallo. Dies ist mein erstes Mal, dass ich Discourse mit Docker unter Mac installiere.

Zuerst entschuldige ich mich für mein Englisch. :sob:

Ich habe bereits Folgendes ausgeführt:

d/boot_dev --init

Dann erhielt ich die Fehlermeldung, dass Port 3000 bereits verwendet wird. Deshalb habe ich den Port in 30030:3000 geändert (Datei: bin/docker/boot_dev).

Danach starte ich diesen Code:


d/boot_dev --init

# In einem Terminal:
d/rails s

# Und in einem separaten Terminal
d/ember-cli

Meine Fragen sind:

  1. Wenn ich den Code d/rails s ausführe, kann ich die Startseite von Discourse unter ‘localhost:30030’ öffnen. Wenn ich nur Discourse öffnen und den Port 30030 verwenden möchte (Portweiterleitung), kann ich dann den Installationsprozess abschließen? Ich weiß nicht, was d/rails s und d/ember-cli sind. …

  2. Und der Prozess d/rail s dauert so lange. Ich mache mir Sorgen, ob etwas falsch ist. Ist das richtig? Oder sind d/rails s und d/ember-cli Hintergrundprozesse, während Discourse gehostet wird?

Danke. :bowing_man:

Hallo,

Ist es in der Entwicklungsumgebung möglich, Konfigurationseinstellungen zu bearbeiten, die in app.yml platziert werden sollen?
Die Frage bezieht sich hauptsächlich auf die Bearbeitung von DISCOURSE_ENABLE_CORS; das einfache Hinzufügen von CORS-Ursprüngen in der Admin-Oberfläche hat das CORS-Problem nicht gelöst.

Vielen Dank.

Es scheint, dass das Erstellen einer discourse.conf-Datei unter /config das Problem gelöst hat:
enable_cors = true

Infos aus der Standard-Konfigurationsdatei: discourse/config/discourse_defaults.conf at main · discourse/discourse · GitHub

2 „Gefällt mir“

Hallo Leute, ich habe ein Problem bei der Initialisierung der Discourse-Entwicklung mit Docker.

Meine Produktions-Discourse verwendet die Tag-Version v2.8.0. Daher muss ich die lokale Entwicklung mit v2.8.0 ausführen.

Ich verwende Docker, das unter Mac OS für mein Entwicklungssetup läuft.
Was ich im Befehl gemacht habe, ist

git clone https://github.com/discourse/discourse.git
cd discourse
git checkout v2.8.0
d/boot_dev --init

Ich erhalte diese Fehlermeldung, nachdem der Init-Code den Abschnitt “Datenbank migrieren” erreicht hat.

Migrating database...
== 20220104053343 AddBookmarkPolymorphicColumns: migrating ====================
-- add_column(:bookmarks, :bookmarkable_id, :integer)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists
/src/lib/migration/safe_migrate.rb:92:in `async_exec'
/src/db/migrate/20220104053343_add_bookmark_polymorphic_columns.rb:5:in `change'
/src/lib/freedom_patches/schema_migration_details.rb:9:in `block in exec_migration'
/src/lib/freedom_patches/schema_migration_details.rb:8:in `exec_migration'
/src/lib/migration/safe_migrate.rb:28:in `migrate'
/src/lib/migration/safe_migrate.rb:55:in `migrate'
/src/lib/tasks/db.rake:218:in `block (2 levels) in <main>'
/src/lib/distributed_mutex.rb:33:in `block in synchronize'
/src/lib/distributed_mutex.rb:29:in `synchronize'
/src/lib/distributed_mutex.rb:29:in `synchronize'
/src/lib/distributed_mutex.rb:14:in `synchronize'
/src/lib/tasks/db.rake:210:in `block in <main>'

Caused by:
ActiveRecord::StatementInvalid: PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists
/src/lib/migration/safe_migrate.rb:92:in `async_exec'
/src/db/migrate/20220104053343_add_bookmark_polymorphic_columns.rb:5:in `change'
/src/lib/freedom_patches/schema_migration_details.rb:9:in `block in exec_migration'
/src/lib/freedom_patches/schema_migration_details.rb:8:in `exec_migration'
/src/lib/migration/safe_migrate.rb:28:in `migrate'
/src/lib/migration/safe_migrate.rb:55:in `migrate'
/src/lib/tasks/db.rake:218:in `block (2 levels) in <main>'
/src/lib/distributed_mutex.rb:33:in `block in synchronize'
/src/lib/distributed_mutex.rb:29:in `synchronize'
/src/lib/distributed_mutex.rb:29:in `synchronize'
/src/lib/distributed_mutex.rb:14:in `synchronize'
/src/lib/tasks/db.rake:210:in `block in <main>'

Vor 2 Monaten habe ich die Entwicklung mit Version 2.8.0 durchgeführt und hatte keine Probleme, aber seit ein paar Tagen habe ich dieses Problem.
Hattet ihr Jungs das gleiche Problem?

Wenn Sie die Datenbank mit einer neueren Version von Discourse migriert haben, müssen Sie eine neue Datenbank erstellen und die alte löschen, um die ältere Migration zu erhalten.

1 „Gefällt mir“

Ich habe einen neuen frischen Klon durchgeführt und die Entwicklung mit Version 2.8.0 initialisiert. Es sollten noch keine Daten vorhanden sein.

1 „Gefällt mir“

Ich habe mich bei der Installation vertan. Gibt es eine Möglichkeit, alles zu deinstallieren und dann von vorne zu beginnen?

Hallo, ich habe diesen Fehler gefunden. Hat jemand Erfahrung mit der Lösung dieses Problems? Danke im Voraus!

Er erscheint, als ich d/boot_dev --init ausgeführt habe.

Migrating database...
rake aborted!
LoadError: cannot load such file -- /usr/local/lib/ruby/gems/2.7.0/gems/mail-2.8.0.rc1/lib/mail/indifferent_hash.rb
/src/lib/email.rb:3:in `<main>'
/src/app/jobs/scheduled/poll_mailbox.rb:10:in `<class:PollMailbox>'
/src/app/jobs/scheduled/poll_mailbox.rb:6:in `<module:Jobs>'
/src/app/jobs/scheduled/poll_mailbox.rb:5:in `<main>'
/src/config/initializers/100-sidekiq.rb:74:in `block (2 levels) in <main>'
/src/config/initializers/100-sidekiq.rb:73:in `glob'
/src/config/initializers/100-sidekiq.rb:73:in `block in <main>'
/src/config/environment.rb:7:in `<main>'
Tasks: TOP => db:migrate => db:load_config => environment
(See full trace by running task with --trace)
1 „Gefällt mir“

Ich habe dieselbe Fehlermeldung erhalten, als ich d/boot_dev --init ausgeführt habe. Ich habe d/rake db:migrate RAILS_ENV=development versucht, aber derselbe Fehler trat wieder auf:

rake aborted!
LoadError: cannot load such file -- /usr/local/lib/ruby/gems/2.7.0/gems/mail-2.8.0.rc1/lib/mail/indifferent_hash.rb
/src/lib/email.rb:3:in `<main>'
/src/app/jobs/scheduled/poll_mailbox.rb:10:in `<class:PollMailbox>'
/src/app/jobs/scheduled/poll_mailbox.rb:6:in `<module:Jobs>'
/src/app/jobs/scheduled/poll_mailbox.rb:5:in `<main>'
/src/config/initializers/100-sidekiq.rb:74:in `block (2 levels) in <main>'
/src/config/initializers/100-sidekiq.rb:73:in `glob'
/src/config/initializers/100-sidekiq.rb:73:in `block in <main>'
/src/config/environment.rb:7:in `<main>'
Tasks: TOP => db:migrate => db:load_config => environment
(See full trace by running task with --trace)

Ich hatte dasselbe Problem. Und ich habe es behoben, indem ich diesen Commit rückgängig gemacht habe:

2 „Gefällt mir“

Funktioniert perfekt für mich. Danke.