Entwicklung mit Docker
Da Discourse in Docker läuft, sollten Sie in der Lage sein, Discourse direkt von Ihrem Quellverzeichnis aus mithilfe eines Discourse-Entwicklungscontainers auszuführen.
Vorteile: Es müssen keine Systemabhängigkeiten installiert werden, und es ist überhaupt keine Konfiguration erforderlich, um schnell eine Entwicklungsumgebung einzurichten.
Nachteile: Es wird etwas langsamer sein als die native Entwicklungsumgebung unter Ubuntu und viel 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, aber es schlägt fehl, wenn es sich innerhalb von /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 Discourse wird aufgrund des Mangels an inotify-Unterstützung in QEMU wahrscheinlich nicht booten.
Stattdessen sollten Sie Install Discourse on macOS for development verwenden
Option 1: Laden Sie eine verpackte .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 Ihrer 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 damit interagieren)
# In einem Terminal:
d/rails s
# Und in einem separaten Terminal
d/ember-cli
… dann öffnen Sie einen Browser unter http://localhost:4200 und voilà!, Sie sollten Discourse sehen.
Plugin-Symlinks
Der Docker-Entwicklungsablauf unterstützt Symlinks im Verzeichnis plugins/ mit folgender 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
Hinweise:
-
Um E-Mails zu testen, führen Sie MailHog aus:
d/mailhog -
Wenn Gems fehlen, führen Sie 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 in Ihrem Quellverzeichnis
tmp/postgresgespeichert. Wenn Sie aus irgendeinem Grund Ihre Datenbank zurücksetzen möchten, führen Sie Folgendes aus:sudo rm -fr data -
Wenn Sie Fehler wie „permission denied while trying to connect to Docker“ sehen, führen Sie Folgendes aus:
run `sudo usermod -aG docker ${USER}` sudo service docker restart -
Wenn Sie Ports vom Container global für das Netzwerk verfügbar machen 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 spezifische Plugin-Tests 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 ist versioniert – schlagen Sie Änderungen auf github vor.