Wie ändere ich app/views/layouts/?

Schnelle, einfache Frage:

Ich vermute, mir fehlen ein paar Gehirnzellen!

Wir haben in einer Datei im Verzeichnis /var/www/discourse/app/views/layouts im App-Container einige Änderungen vorgenommen.

Dann dachten wir (wie Dummköpfe), wir könnten den Container einfach mit /var/discourse/launcher rebuild app neu aufbauen (falsch!), aber jedes Mal, wenn wir das tun, werden unsere Änderungen überschrieben.

Wir möchten Discourse nicht forken, aber wir möchten die App mit dem Launcher neu aufbauen, ohne dass unsere lokalen Änderungen überschrieben werden.

Kann uns jemand bitte sagen, wie das geht?

Vielen Dank!

Es sieht so aus, als hätten wir herausgefunden, warum bei jedem Versuch unsere Dateien während des Neuaufbauprozesses in der App überschrieben wurden:

Der Grund scheint darin zu liegen, dass launcher das Basis-Discourse-Image herunterlädt. Dieses Image enthält ein Verzeichnis namens .git, und die Git-Konfigurationsdatei zeigt natürlich auf das Haupt-Discourse-Repository, was dann unsere Änderungen überschreibt:

launcher

pull_image() {
  # Füge einen einzelnen Wiederholungsversuch hinzu, um DockerHub-TLS-Fehler zu umgehen
  $docker_path pull $image || $docker_path pull $image
}

Zuvor haben wir fälschlicherweise angenommen, dass launcher das Image erstellt (wie haben wir das übersehen?!). Es ist nun klar, dass es ein Basis-Image von Docker Hub herunterlädt.

Zurück an den Zeichentisch!

Gibt es einen Flag, den wir setzen können, damit launcher das Basis-Image nicht herunterlädt, sondern stattdessen selbst erstellt?

Hallo @DBHacker,

es klingt so, als könntest du Folgendes tun:

  1. Änderungen am Basis-Container vornehmen (wie du erwähnt hast)
  2. dieses Image taggen und speichern
  3. das Image in dein eigenes Docker-Image-Repository hochladen
  4. die Datei launcher so bearbeiten, dass sie docker pull für das modifizierte Basis-Image aus deinem Repository ausführt

Ich hoffe, das hilft dir ein wenig!

Im Übrigen wird dies auf Meta (ganz sicher meiner Meinung nach) nicht unterstützt, also bist du auf dich allein gestellt.

Viel Spaß beim Hacking! :slight_smile:

Hinweis: Ich habe das nicht ausprobiert … aber es klingt so, als hättest du Spaß dabei! :slight_smile:

1 „Gefällt mir“

Sie müssen diese Änderungen in einem Plugin oder einer Theme-Komponente vornehmen.

6 „Gefällt mir“

Hallo @pfaffman,

Ich stimme dir absolut zu: Plugins und Theme-Komponenten sind der richtige Weg! Diese Methode wird vollständig unterstützt und sorgt dafür, dass man mit dem Meta-Entwicklungsteam synchron bleibt.

Es ist auch gut, neugierig zu sein, Möglichkeiten zu erkunden und ein tieferes Verständnis für Discourse zu entwickeln. Nachdem ich gestern diesen Beitrag gelesen hatte, habe ich ein lokales Docker-Registry eingerichtet, das Discourse-Basis-Image lokal getaggt, dieses Image in mein neues Docker-Registry (localhost) gepusht und anschließend eine Discourse-App neu erstellt, die das Discourse-Basis-Image aus dem lokalen Registry zieht.

Ich finde es spannend, zu experimentieren und mehr über Discourse zu lernen. Von dieser Systemadministrator-Exploration habe ich viel gelernt. Natürlich ist das nicht die Art und Weise, wie wir eine Produktionsanwendung betreiben würden. Aber ich habe viel daraus mitgenommen, wie man das Discourse-Basis-Image aus localhost statt remote zieht, und es war überraschend einfach. Deshalb habe ich diesen Experimentaufbau für andere neugierige Systemadministratoren dokumentiert:

Ich hoffe, andere Systemadministrator-Entdecker können auf irgendeine kleine Weise von diesem Experiment profitieren.

Bleib neugierig

1 „Gefällt mir“

Es gibt eine super einfache Möglichkeit, dies umzusetzen, ohne sich um Bilder zu kümmern oder ein Plugin zu entwickeln. Wenn Sie nur vorhandene statische Dateien ändern, können Sie diese in der app.yml anpassen.

Suchen Sie nach hooks und pups. Mehrere andere Anleitungen verwenden bereits diesen Ansatz.

5 „Gefällt mir“

Danke @neounix

Ich mag es auch, Neues zu lernen und auszuprobieren.

Eines Tages, wenn ich Zeit habe, werde ich versuchen, mehr über Docker und lokale Register zu lernen.

Für jetzt werde ich bei der Plugin-Entwicklung bleiben, da sie von Discourse unterstützt wird und gut in das Discourse-Entwicklungsmodell passt.

Wie du gesagt hast, ist das Lernen dieser Dinge zwar Spaß, aber es ist auch gut, im Mainstream zu bleiben!

:slight_smile:

2 „Gefällt mir“

Zustimmung.

Selbst nach Experimenten mit dem lokalen Docker-Registry und dem lokalen Discourse-Basis-Image konnte ich keine konsistenten Ergebnisse erzielen (ich bin mir nicht sicher warum; ich muss wahrscheinlich ein wichtiges Detail in der Konfiguration übersehen haben).

Andererseits habe ich mehr über lokale Docker-Registries gelernt und wie man eine erstellt und verwaltet.

Nur ein kurzer Seitenblick auf ein Docker-Experiment… habe auf jeden Fall viel gelernt!

1 „Gefällt mir“

Ja, sieht so aus, als wäre ein Plugin die einzige gangbare Option.

Danke an alle für die Antworten und die Hilfe.

2 „Gefällt mir“

Welche Art von Dateiänderungen nimmst du vor?

1 „Gefällt mir“