Zunächst einmal vielen Dank an die Entwickler für die Erstellung einer so großartigen App!
Ich hoffe, dass ich eine Sache klären kann, die mich verwirrt. Ich war der Auffassung, dass die korrekte Methode, $ rake db:*-Befehle in Rails 6 für die Initialisierung zu verwenden, darin besteht, $ rake db:prepare auszuführen, aber Discourse wird nicht ordnungsgemäß initialisiert, wenn ich $ rake db:prepare allein ausführe. Und aus den Diskussionen auf Meta/hier sehe ich, dass prepare nur für die Initialisierung von Testdaten und vielleicht irgendwo in den im Hintergrund ausgeführten Aufgaben verwendet wird.
Könnte mir bitte jemand helfen zu verstehen, ob $ rake db:migrate der einzige Befehl ist, den ich benötige, um Discourses Datenbank für Datenbank-Migrationen oder Initialisierungen zu initialisieren, und warum dies der Fall ist?
Ich denke, der Build-Prozess muss standardmäßig db:create ausführen, da meine Instanz – sofern ich keine Funktionalität übersehe – bereits mit nur einem Precompile der Assets (oder Ähnlichem) und einer Migration zu funktionieren scheint.
Nach etwas Recherche scheint dies mehr Informationen zu der gesuchten Antwort zu enthalten:
Die Rake-Aufgaben von Discourse überschreiben das Rails db:migrate. Ich denke, dies kann von Rails-Anwendungen als unorthodox betrachtet werden, z. B. dieser PR: Add db:prepare rake task. by robertomiranda · Pull Request #35768 · rails/rails · GitHub. Wenn man sich ansieht, was db:prepare tut, greift es direkt auf ActiveRecord zu und führt das erwartete Datenbank-Setup durch, ruft jedoch nicht die anderen erforderlichen einzelnen db:*-Aufgaben auf, die man erwarten könnte, da es Teile überschreibt, die von der Upstream-Version erwartet werden.
Und ein Seitenhinweis: Die Art und Weise, wie ich Discourse derzeit eingerichtet habe, erlaubt es dem Discourse-Datenbankbenutzer niemals, privilegierte Rechte zu erhalten. Daher scheint es, dass Aktionen wie db:drop und db:create nach dem Build eine leichte Konfigurationsänderung erfordern werden, im Vergleich zu dem, was ich implementiert habe.