Rails 6 wird mit zwei Autoloading-Modi ausgeliefert: zeitwerk und classic. In diesem Pull Request DEV: Upgrading Discourse to Rails 6 by KrisKotlarek · Pull Request #8083 · discourse/discourse · GitHub habe ich Rails auf Version 6.0.0 mit dem klassischen Autoloader als Übergangsphase aktualisiert. Es wäre interessant zu versuchen, auf Zeitwerk umzusteigen.
Zeitwerk ist ein effizienter und threadsicherer Code-Loader für Ruby. Solange das Projekt den Namenskonventionen folgt, kann Zeitwerk die richtigen Dateien finden und sie bei Bedarf oder im Voraus laden, ohne dass require oder require_dependency erforderlich sind. Zudem kann es laut diesem Artikel https://weblog.rubyonrails.org/2019/2/22/zeitwerk-integration-in-rails-6-beta-2/ eine kleine Leistungssteigerung für die Anwendung bieten.
Es gibt einige Schritte, die ich durchführen muss, um es zum Laufen zu bringen:
-
Den Namen einiger Klassen ändern, um der Rails-Namenskonvention zu entsprechen. Beispielsweise sollte die Datei
canonical_url.rbdie KlasseCanonicalUrlanstelle vonCanonicalURLdefinieren. Ebenso sollte die Dateiondiff.rbdie KlasseOnpdiffanstelle vonONPDiffdefinieren. Ein alternativer Ansatz wäre, einen benutzerdefinierten Inflector an das Projekt anzuhängen; ich denke jedoch, dass das Befolgen der Konvention eine bessere Wahl sein könnte – GitHub - fxn/zeitwerk: Efficient and thread-safe code loader for Ruby · GitHub -
Ähnlich wie im vorherigen Punkt sollten benutzerdefinierte Validierungen, die sich im Verzeichnis
validationsbefinden, gemäß der Konvention in ein ModulValidationsgekapselt werden. Außerdem erben einige Validierungen von EachValidator und sollten ohne Namensraum zugänglich sein. Ich plane, sie in ein separates Verzeichnis zu verschieben und zu den Autoload-Pfaden hinzuzufügen. -
Alle
require_dependency-Anweisungen entfernen und sicherstellen, dass das Projekt funktioniert. -
Alle
require-Anweisungen entfernen und sicherstellen, dass Discourse funktioniert. -
Sicherstellen, dass alle Plugins auf die erforderlichen Abhängigkeiten zugreifen können. Ich weiß noch nicht, wie ich dies erreichen kann. Ich möchte zunächst sicherstellen, dass Discourse ohne Plugins läuft.
Natürlich gibt es noch viele Unbekannte zu lösen. Ich werde Sie über den Fortschritt auf dem Laufenden halten. Wenn Sie jedoch Interesse haben, sich das anzusehen, habe ich hier angefangen, damit zu spielen: Commits · KrisKotlarek/discourse · GitHub
Bitte lassen Sie mich wissen, ob Sie bei der Implementierung von Zeitwerk Nachteile sehen oder ob Sie der Meinung sind, dass ich etwas übersehen habe.