Entwicklung mit Docker
Da Discourse in Docker läuft, sollten Sie in der Lage sein, Discourse direkt aus Ihrem Quellverzeichnis mithilfe eines Discourse-Entwicklungscontainers auszuführen.
Vorteile: Keine Installation von Systemabhängigkeiten erforderlich, keine Konfiguration für die schnelle Einrichtung einer Entwicklungsumgebung notwendig.
Nachteile: Etwas langsamer als die native Entwicklungsumgebung unter Ubuntu und deutlich langsamer als eine native Installation unter MacOS.
Siehe auch Developing Discourse using a Dev Container
Schritt 1: Docker installieren
Ubuntu
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce
19.10
sudo apt-get install docker.io
sudo usermod -a -G docker $USER
sudo reboot
Windows WSL: Ubuntu
Sie können die obigen Befehle innerhalb von WSL ausführen, aber Sie müssen alle Dateien im WSL-Dateisystem haben. Z. B. funktioniert es einwandfrei, wenn es sich innerhalb von ~/discourse befindet, schlägt jedoch fehl, wenn es sich unter /mnt/c/discourse befindet.
MacOS
Das Discourse-Entwicklungs-Docker-Image ist nur für x86_64-Architekturen verfügbar. M1 Macs können das Image mithilfe von Architektur-Emulation starten, aber es ist unwahrscheinlich, dass Discourse aufgrund des Mangels an inotify-Unterstützung in QEMU startet.
Stattdessen sollten Sie Install Discourse on macOS for development verwenden
Option 1: Laden Sie ein verpacktes .dmg aus dem Docker Store herunter
Option 2: brew install docker
Schritt 2: Container starten
Klonen Sie das Discourse-Repository auf Ihr lokales Gerät.
git clone https://github.com/discourse/discourse.git
cd discourse
(von Ihrem Quell-Root)
d/boot_dev --init
# warten während:
# - Abhängigkeiten installiert werden,
# - die Datenbank migriert wird, und
# - ein Admin-Benutzer erstellt wird (Sie müssen mit diesem interagieren)
# In einem Terminal:
d/rails s
# Und in einem separaten Terminal
d/ember-cli
…öffnen Sie dann einen Browser auf http://localhost:4200 und voilà!, Sie sollten Discourse sehen.
Plugin-Symlinks
Der Docker-Entwicklungs-Flow unterstützt Symlinks im Verzeichnis plugins/ mit der folgenden Einschränkung:
Immer wenn ein neuer Plugin-Symlink erstellt wird, muss der Docker-Container mit folgendem Befehl neu gestartet werden:
d/shutdown_dev; d/boot_dev
Anmerkungen:
-
Um E-Mails zu testen, führen Sie MailHog aus:
d/mailhog -
Wenn Gems fehlen, führen Sie Folgendes aus:
d/bundle install -
Wenn eine DB-Migration erforderlich ist:
d/rake db:migrate RAILS_ENV=development -
Wenn Sie fertig sind, können Sie den Docker-Container mit folgendem Befehl beenden:
d/shutdown_dev -
Daten werden zwischen den Aufrufen des Containers im Verzeichnis
tmp/postgresIhres Quell-Roots persistent gespeichert. Wenn Sie aus irgendeinem Grund Ihre Datenbank zurücksetzen möchten, führen Sie Folgendes aus:sudo rm -fr data -
Wenn Fehler wie „permission denied while trying to connect to Docker“ angezeigt werden, führen Sie Folgendes aus:
run `sudo usermod -aG docker ${USER}` sudo service docker restart -
Wenn Sie die Ports vom Container global für das Netzwerk freigeben möchten (standardmäßig deaktiviert), verwenden Sie:
d/boot_dev -p -
Die Dockerfile stammt von discourse/discourse_docker auf GitHub, insbesondere image/discourse_dev.
Tests ausführen
d/rake autospec
Um Tests für spezifische Plugins auszuführen, können Sie auch Folgendes tun:
d/rake plugin:spec["discourse-follow"]
Oder sogar etwas wie dies, um noch spezifischer zu sein:
my-machine:~/discourse$ d/shell
discourse@discourse:/src$ RAILS_ENV=test /src/bin/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37
Dieses Dokument wird versioniert – schlagen Sie Änderungen auf github vor.