Es ist Mitte Dezember, was bedeutet, dass in wenigen Tagen eine neue Version von Ruby veröffentlicht wird. Selbst wenn Sie nicht vorhaben, Ihre Rails-Anwendungen gleich am ersten Tag auf die neueste Version zu aktualisieren, ist es nie ein schlechter Zeitpunkt, um mit der Planung des nächsten Upgrades zu beginnen.
Warum ein Upgrade von Ruby?
Jedes Jahr führt das Ruby-Core-Team neue Features ein, um die Sprache voranzutreiben. Manchmal handelt es sich dabei um neue Programmierkonstrukte, die Ihr Leben als Entwickler einfacher machen. Andere Male führen diese Änderungen zu Leistungssteigerungen und allgemeiner Zuverlässigkeit. Ist es nicht großartig, wenn ein kleines Upgrade Ihre Rails-Applikation schneller machen kann, oder wenn ein neues Feature der Sprache einen ehemals komplexen Ansatz auf ein oder zwei Zeilen Code vereinfacht?
Ruby-Releases im Laufe des Jahres bieten auch wichtige Sicherheits-Upgrades für die Sprache, die bis zu Ihren Anwendungen und den Menschen, die sie benutzen, durchsickern. Sicherzustellen, dass alle Schichten Ihrer Anwendung sicher sind, ist genauso wichtig wie die Vermeidung von SQL-Injection und Cross-Site-Scripting-Schwachstellen. Es ist wichtig, mit den unterstützten Ruby-Versionen Schritt zu halten.
Und manchmal wird Ihre Hand durch eine Abhängigkeit oder eine Abhängigkeit von dieser Abhängigkeit gezwungen. Vielleicht kennen Sie das – Sie wollen eine Bibliothek eines Drittanbieters in Ihre Anwendung integrieren, können das aber nicht, weil sie eine neuere Ruby-Version benötigt, als Sie derzeit einsetzen. Verbringen Sie Ihre Zeit damit, die Bibliothek zu forken und zurückzuportieren, um Ihre ältere Codebasis zu unterstützen, oder aktualisieren Sie Ihre Codebasis, um das aktuelle Ruby-Ökosystem zu nutzen?
Wann sollte man Ruby aktualisieren
Neue Hauptversionen (zum Beispiel 2.2, 2.3 und 2.4) werden traditionell am 25. Dezember jeden Jahres veröffentlicht. Wenn man sich die letzten Ruby-Hauptversionen ansieht, kann man davon ausgehen, dass die Sicherheitsunterstützung für ein bestimmtes Ruby noch etwa drei Jahre nach der ersten Veröffentlichung gewährleistet ist. Wenn Sie die Möglichkeit haben, sollten Sie Ihr Ruby upgraden, bevor diese Zeitspanne abläuft.
Selbst bei konservativen Projekten fühle ich mich wohl, wenn ich ein Jahr nach der Erstveröffentlichung auf eine bestimmte Version von Ruby upgrade. Das gibt Zeit für Fehlerbehebungen in dieser Version, sowie für die Autoren von Edelsteinen, die notwendigen Aktualisierungen vorzunehmen, um ein neueres Ruby zu unterstützen.
Wann sollte man Ruby nicht aktualisieren
Ein Ratschlag: Aktualisieren Sie Ruby-Versionen nicht gleichzeitig mit einem Rails-Versions-Upgrade! Selbst wenn die Rails-Version, auf die Sie upgraden wollen, eine bestimmte Ruby-Version erfordert, sollten Sie zuerst Ihre Ruby-Version upgraden und freigeben und dann das Rails-Upgrade in Angriff nehmen. Sie werden das gesamte Upgrade viel schwieriger machen, wenn Sie versuchen, alles auf einmal zu machen, anstatt es schrittweise anzugehen.
Ich hatte gutes Glück damit, mehrere Versionen auf einmal zu aktualisieren – zum Beispiel von Ruby 2.1 auf Ruby 2.4, aber andere Versuche, dies zu tun, haben mir Probleme bereitet, wie der Wechsel von Ruby 1.8 auf 2.0. Wenn Sie Zweifel haben, teilen Sie das Upgrade in kleinere Teile auf.
Vorbereiten
Bevor Sie ein Upgrade durchführen, ist es eine gute Idee, sich darüber zu informieren, was neu ist – Funktionen, Fehlerbehebungen, Verwerfungen und Dinge, die einfach nicht mehr funktionieren werden. Die Vorabversionen von Ruby erscheinen schon Monate im Voraus und viele Blogger nehmen sich die Zeit, um zu erkunden, was es Neues gibt – suchen Sie also nach „What’s new in ruby x.y“, um ein Gefühl dafür zu bekommen, was Ihre Ruby-Kollegen finden. Der News-Feed auf der offiziellen Ruby-Webseite veröffentlicht auch Ankündigungen zu jedem Release, zusammen mit den darin enthaltenen Neuerungen.
Und, wie bei jedem Upgrade, werden Sie eine so gründliche Test-Suite wie möglich für Ihre Anwendung haben wollen – selbst wenn Ihr eigener Anwendungscode nicht viele Änderungen benötigt, um mit dem neuen Ruby konform zu sein, könnten Ihre Abhängigkeiten tiefgreifende Änderungen erfahren haben. Oder sie haben vielleicht Probleme mit der neuen Ruby-Version. Nehmen Sie sich ein wenig Zeit, um Ihre Testsituation zu überprüfen. Verwenden Sie SimpleCov, um Bereiche zu identifizieren, die eine geringe Abdeckung aufweisen. Versuchen Sie die Lücken zu füllen, oder zumindest diese Bereiche ein wenig mehr als sonst manuell zu testen. (Und wenn Sie Hilfe brauchen, um mit dem Testen anzufangen, kenne ich ein ziemlich gutes Buch zu diesem Thema, wink wink.)
Wie man Ruby aktualisiert
Um zu beginnen, installieren Sie das Ziel-Ruby auf Ihrem Entwicklungssystem, indem Sie den Ruby-Versionsmanager Ihrer Wahl verwenden (oder über ein Docker-Image, wenn das Ihr Ding ist). Siehe Anleitungen für RVM, rbenv und chruby für Details.
Jetzt ist ein guter Zeitpunkt, um die neue Ruby-Version auch in Ihrer .ruby-version
-Datei und/oder in Ihrem Gemfile
(von Heroku bevorzugt) anzugeben. In beiden Fällen werden Sie wahrscheinlich einen alten Wert durch einen neuen ersetzen. Überprüfen Sie die Änderung, indem Sie das Verzeichnis neu laden:
Nächstens installieren Sie Rails und die anderen Abhängigkeiten Ihrer Anwendung in die neue Ruby-Umgebung:
An dieser Stelle kann es knifflig werden, besonders wenn Sie Gem-Versionen einbinden, die das neue Ruby nicht unterstützen. Ich bin das bei Upgrade-Projekten auf zwei verschiedene Arten angegangen. In einigen Fällen habe ich einzelne Gems aktualisiert, bis alle Abhängigkeiten installiert werden können. Mit neueren Versionen von Bundler hat der konservative Aktualisierungsmodus, der verhindert, dass gemeinsam genutzte Abhängigkeiten ebenfalls aktualisiert werden, für mich gut funktioniert.
In einigen Fällen kann es sein, dass Sie den konservativen Modus verwenden und dann einzelne Gems aktualisieren müssen, um andere Änderungen zu berücksichtigen. Als ich zum Beispiel Anfang des Jahres eine Anwendung auf Ruby 2.4 aktualisierte, musste ich das simple_form-Gem separat aktualisieren, um eine Veralterung zu beheben.
Wenn alles installiert ist, können Sie Ihre Testsuite starten! Stellen Sie zunächst sicher, dass sie bootet, und achten Sie dann auf Fehler und Verwerfungswarnungen. Wenn Sie sich über das neue Ruby, auf das Sie upgraden, informiert haben, sollten Ihnen die Fehler und Warnungen bekannt vorkommen, und Sie werden hoffentlich einen klaren Weg haben, sie zu beheben. Ignorieren Sie keine Verwerfungswarnungen! Die Warnungen von heute sind die Fehler von morgen. Nehmen Sie sich die Zeit, jetzt aufzuräumen, während Sie mitten in einem Ruby-Upgrade stecken.
Mit einer erfolgreichen Test-Suite, die frei von Deprecation-Warnungen ist, führe ich die App gerne lokal aus, rufe die Rails-Konsole auf und prüfe auf weitere Deprecation-Warnungen im Entwicklungsprotokoll. Dies ist besonders wichtig, wenn SimpleCov Lücken in Ihrer Testabdeckung gefunden hat. Wenn Sie neue Warnungen (oder Fehler) bemerken, die in Ihren bestehenden Tests nicht aufgedeckt wurden, tun Sie Ihr Bestes, um die Abdeckung jetzt hinzuzufügen.
Glückwunsch, Ihre Anwendung ist auf ein neueres, unterstütztes Ruby aktualisiert! Ihre nächsten Schritte hängen davon ab, wie und wo Ihre Anwendung bereitgestellt wird. Bei Platform-as-a-Service-Anbietern wie Heroku und Container-basierten Deployments ist das relativ einfach. Wenn Sie eigene Server haben, müssen Sie wahrscheinlich etwas mehr Arbeit leisten, z. B. Ruby, Rails und andere Abhängigkeiten auf den betreffenden Servern installieren. Das würde den Rahmen dieses Artikels sprengen.
Sobald das aber erledigt ist, können Sie etwas ruhiger schlafen, da Sie wissen, dass Ihre Rails-Anwendung ein modernes Ruby verwendet. Danke fürs Lesen!