Dev News Daily ENDE

Rails 8.1.4 behebt Absturz von number_to_human_size oberhalb eines Terabyte und ergaenzt Einheiten bis Zettabyte

Rails 8.1.4 ist erschienen. Die Ankuendigung selbst besteht aus Pruefsummen und Verweisen, der Inhalt steht also in den Release Notes, und es ist ein Patch-Release, das von Active Support bestimmt wird.

Drei Korrekturen verdienen es, genannt zu werden. number_to_human_size stuerzte bei Groessen oberhalb eines Terabyte ab; behoben wird das durch Unterstuetzung der Einheiten Petabyte, Exabyte und Zettabyte. ActiveSupport::JSON.decode wurde mit dem kommenden json-3.0-Gem vertraeglich gemacht. Und HashWithIndifferentAccess#filter gab ein gewoehnliches Hash zurueck; jetzt behaelt die Methode ihre eigene Klasse — genau die Art stiller Typaenderung, die erst zwei Aufrufebenen spaeter auffaellt.

Der Rest ist die uebliche Musterung eines Patch-Release: Die Fehlerseite scheiterte an SyntaxErrors mit mehrzeiligen Meldungen, Range#sole warf NoMethodError, Cache::FileStore warf NameError, wenn fileutils nicht bereits geladen war, Enumerable#in_order_of mit filter: true verlor ausdruecklich genannte nil-Elemente, number_to_human und number_to_human_size stuerzten bei :precision gleich nil ab, und InheritableOptions#to_h flachte verschachtelte Eltern nicht rekursiv ab.

Rails 8.1.4 behebt Absturz von number_to_human_size oberhalb eines Terabyte und ergaenzt Einheiten bis Zettabyte
Rails 8.1.4 behebt Absturz von number_to_human_size oberhalb eines Terabyte und ergaenzt Einheiten bis Zettabyte — Dev News Daily

Was das bedeutet

Die Terabyte-Korrektur erinnert gut daran, wo solche Fehler wohnen. number_to_human_size ist ein Anzeige-Helfer, an den niemand denkt, und die Grenze war unsichtbar, bis jemandes Speicherbericht sie ueberschritt — und dann stuerzt eine Seite ab, die nur eine Zahl darstellt. Am umgebenden Code hatte sich nichts geaendert; gewachsen sind die Daten.

Die Aenderung an HashWithIndifferentAccess#filter ist die, die man vor dem Upgrade genau lesen sollte. Eine Methode, die bisher ein gewoehnliches Hash zurueckgab, liefert nun die Klasse mit indifferentem Zugriff, und jeder Code, der sich auf die Herabstufung verlassen hat — absichtlich oder versehentlich —, verhaelt sich danach anders. Das ist die richtige Korrektur und bleibt eine Verhaltensaenderung in einem Patch-Release: also etwas zum Durchsuchen, nicht zum Entdecken.

Geschrieben von Victoria Shinder.