Dev News Daily ENDE

Rails-Main verlangt Ruby 3.3.5 und streicht dynamische :controller-Routen

Zwei Änderungen, die diese Woche in den Main-Zweig von Rails eingeflossen sind, werden Anwendungen beim nächsten großen Release betreffen, wie die wöchentliche Zusammenfassung des Projekts berichtet. Die eine hebt die Mindestversion von Ruby an, die andere entfernt eine Routing-Form, die seit Rails 5.0 als veraltet gilt.

Ruby 3.3.5 wird Minimum. Der am 1. Oktober zusammengeführte Pull Request 58908 nennt den Grund. Ruby-Versionen vor 3.3.5 haben einen Use-after-free-Fehler in WeakMap und WeakKeyMap, der laut Autor früher als leicht auslösbar eingestuft wurde. Deshalb nutzte Rails bisher einen strengeren Ersatz, der nur Schlüssel wie Threads und Fibers zulässt. In der Anwendung des Autors kostete das Leeren des Query-Caches spürbar CPU, weil der heutige Code jeden Connection-Pool durchläuft, um den Cache des aktuellen Ausführungskontexts zu leeren. Die Struktur umzudrehen, sodass nur die tatsächlich genutzten Pools besucht werden, setzt Pools als schwache Schlüssel voraus – genau das verbietet der Ersatz. Mit der neuen Mindestversion wird dieser Umbau möglich; ein Folge-PR entfernt bereits Code, der nur für ältere Rubys existierte.

Routen dürfen Controller und Action nicht mehr aus der URL nehmen. Pull Request 58893 von Aaron Patterson, zusammengeführt am 30. September, lässt eine Route wie get ":controller(/:action(/:id))" beim Zeichnen einen ArgumentError werfen. Das Changelog rät, die tatsächlich bedienten Routen auszuschreiben, etwa get "photos", to: "photos#index". Zwei verwandte Muster brechen ebenfalls: Eine Controller-Klasse ohne Action wie in get "show", to: PhotosController braucht nun action: "show", und ein regulärer Ausdruck für :controller oder :action führt zu einem Fehler statt zu einer Route, die nie passen kann. Request#controller_class wirft jetzt ActionDispatch::MissingController, wenn kein :controller-Parameter vorhanden ist – etwa vor dem Routing oder bei Anfragen an einen Rack-Endpunkt –, statt einen Platzhalter zurückzugeben, der mit 404 antwortete.

Außerdem meldet die Zusammenfassung, dass die Vorträge der Rails World auf YouTube stehen, dass ein überarbeiteter Leitfaden zu Autoloading und Reloading zur Durchsicht bereitliegt und dass die Validierungs-Callbacks neben on nun auch except_on kennen. 34 Personen haben in der Woche beigetragen.

Rails-Main verlangt Ruby 3.3.5 und streicht dynamische :controller-Routen
Rails-Main verlangt Ruby 3.3.5 und streicht dynamische :controller-Routen — Dev News Daily

Was das bedeutet

Noch steckt keine der Änderungen in einem veröffentlichten Release – genau deshalb lohnt der Blick auf Main: Es bleibt Zeit. Wer noch Ruby 3.2 oder frühe 3.3-Versionen fährt, hat jetzt einen konkreten Planungspunkt, und eine schnelle Suche nach :controller in config/routes.rb zeigt, ob eine alte Sammelroute die Anwendung künftig am Start hindert.

Geschrieben von Victoria Shinder.