Jest środek grudnia, co oznacza, że nowa wersja Ruby zostanie wydana już za kilka dni. Nawet jeśli nie planujesz aktualizować swoich aplikacji Rails do najnowszej wersji w pierwszym dniu, nigdy nie jest to zły czas na rozpoczęcie planowania następnej aktualizacji.
Dlaczego warto aktualizować Rubiego?
Co roku zespół rdzeni Rubiego wprowadza nowe funkcje, aby popchnąć język do przodu. Czasami są to nowe konstrukcje programistyczne, które ułatwiają życie programisty. Innym razem zmiany te skutkują wzrostem wydajności i ogólnej niezawodności. Czyż to nie wspaniałe, gdy niewielka praca nad aktualizacją może uczynić Twoją aplikację Rails szybszą, lub gdy nowa cecha języka upraszcza poprzednio skomplikowane podejście do prostej linijki lub dwóch kodu?
Wydania Ruby w ciągu roku dostarczają również ważnych aktualizacji bezpieczeństwa języka, które przenoszą się na Twoje aplikacje i ludzi, którzy z nich korzystają. Upewnienie się, że wszystkie warstwy Twojej aplikacji są bezpieczne jest tak samo ważne jak unikanie podatności na SQL injection oraz cross-site scripting. Utrzymywanie wersji Rubiego na bieżąco jest kluczowe.
Czasem, Twoja ręka jest zmuszona przez zależność, lub zależność tej zależności. Być może zdarzyło Ci się to – chcesz zintegrować bibliotekę innej firmy z Twoją aplikacją, ale nie możesz, ponieważ wymaga ona nowszej wersji Rubiego niż ta, którą obecnie używasz. Czy spędzasz czas na rozwidlaniu i back-portowaniu biblioteki aby wspierać starszą wersję, czy też aktualizujesz swoją bazę kodu aby wykorzystać obecny ekosystem Rubiego?
Kiedy aktualizować Rubiego
Nowe główne wersje (na przykład 2.2, 2.3, i 2.4) są tradycyjnie wydawane 25 grudnia każdego roku. Patrząc na kilka ostatnich głównych wydań Rubiego, możesz oczekiwać wsparcia bezpieczeństwa dla danego Rubiego przez około trzy lata od jego pierwszego wydania. Jeśli możesz, zaktualizuj Rubiego przed wygaśnięciem tego wsparcia.
Nawet w konserwatywnych projektach, mogę komfortowo zaktualizować Rubiego do danej wersji około rok po jego pierwszym wydaniu. Daje to czas na poprawki błędów w tym wydaniu, jak również autorom gemów na dokonanie niezbędnych aktualizacji do nowszej wersji Rubiego.
Kiedy nie aktualizować Rubiego
Słowo porady: Nie uaktualniaj wersji Ruby w tym samym czasie co uaktualnienie wersji Railsów! Nawet jeśli wersja Railsów do której się aktualizujesz wymaga określonej wersji Rubiego, najpierw zaktualizuj i wypuść swoją wersję Rubiego, a dopiero potem zajmij się aktualizacją Railsów. Jeśli będziesz próbował zrobić to wszystko na raz, a nie krok po kroku, sprawisz, że Twoja ogólna aktualizacja będzie o wiele trudniejsza.
Miałem szczęście aktualizować wiele wersji na raz – na przykład z Ruby 2.1 do Ruby 2.4, ale inne próby zrobienia tego spowodowały u mnie problemy, jak na przykład przejście z Ruby 1.8 do 2.0. Jeśli masz wątpliwości, podziel aktualizację na mniejsze kawałki. Prawie zawsze uważam że przyrostowe aktualizacje idą płynniej niż hurtowe.
Przygotuj się
Przed wykonaniem jakiejkolwiek aktualizacji, dobrym pomysłem jest zapoznanie się z nowościami – funkcjami, poprawkami, deprecjacjami i rzeczami które po prostu nie będą już działać. Przedpremierowe wersje Rubiego zaczynają się ukazywać z wielomiesięcznym wyprzedzeniem, a wielu blogerów poświęca czas na odkrywanie nowości – wyszukaj co nowego w ruby x.y, aby zorientować się, co znaleźli Twoi koledzy Rubyści. Wiadomości na oficjalnej stronie Rubiego również publikują zapowiedzi każdego wydania, wraz z tym co nowego w nich znajdziemy.
I jak w przypadku każdej aktualizacji, będziesz chciał mieć jak najdokładniejszy zestaw testów dla swojej aplikacji – nawet jeśli Twój własny kod aplikacji nie wymaga wielu zmian aby dostosować się do nowego Rubiego, Twoje zależności mogły przejść głębsze zmiany. A może mają one problemy z nową wersją Rubiego. Poświęć trochę czasu na przegląd sytuacji testowej. Użyj SimpleCov do zidentyfikowania obszarów, które nie mają wystarczającego pokrycia. Postaraj się wypełnić te luki, lub przynajmniej przetestuj te obszary ręcznie trochę bardziej niż zwykle. (A jeśli potrzebujesz pomocy w rozpoczęciu testowania, znam całkiem niezłą książkę na ten temat, wink wink.)
Jak zaktualizować Rubiego
Aby zacząć, zainstaluj Rubiego na swojej konfiguracji deweloperskiej, używając wybranego menadżera wersji Rubiego (lub poprzez obraz Dockera, jeśli to Twoja sprawa). Zobacz instrukcje dla RVM, rbenv i chruby po szczegóły.
Teraz jest dobry czas aby podać nową wersję Rubiego w swoim pliku .ruby-version
i/lub w swoim Gemfile
(preferowane przez Heroku). Tak czy inaczej, prawdopodobnie będziesz zastępował starą wartość nową. Zweryfikuj zmianę przeładowując katalog:
Następnie zainstaluj Rails i inne zależności Twojej aplikacji w nowym środowisku Ruby:
Tutaj sprawy mogą się skomplikować, szczególnie jeśli dołączasz jakieś wersje gemów, które nie wspierają nowego Rubiego. Podchodziłem do tego na dwa różne sposoby w projektach aktualizacji. W niektórych przypadkach aktualizowałem poszczególne klejnoty do momentu, aż wszystkie zależności będą mogły się zainstalować. W nowszych wersjach Bundlera, konserwatywny tryb aktualizacji, który zapobiega aktualizowaniu współdzielonych zależności, sprawdził się u mnie doskonale.
W niektórych przypadkach, może się okazać, że trzeba będzie użyć trybu konserwatywnego, a następnie zaktualizować poszczególne klejnoty, aby zaadresować inne zmiany. Na przykład, podczas aktualizacji aplikacji do Ruby 2.4 na początku tego roku, musiałem osobno zaktualizować gem simple_form aby rozwiązać problem deprecjacji.
Po zainstalowaniu wszystkiego, jesteś gotowy do uruchomienia zestawu testów! Po pierwsze, upewnij się, że się uruchamia, a następnie obserwuj błędy i ostrzeżenia o deprecjacji. Jeśli przeczytałeś o nowym Rubim, do którego się aktualizujesz, to błędy i ostrzeżenia powinny wyglądać znajomo i będziesz miał nadzieję, że będziesz miał jasną ścieżkę do ich rozwiązania. Nie ignoruj ostrzeżeń o deprecjacji! Dzisiejsze ostrzeżenia są jutrzejszymi porażkami. Poświęć czas na sprzątanie teraz, kiedy jesteś w trakcie aktualizacji Rubiego.
Mając komplet testów, wolnych od ostrzeżeń o deprecjacji, lubię uruchamiać aplikację lokalnie, odpalać konsolę Rails i sprawdzać czy nie ma innych ostrzeżeń o deprecjacji w dzienniku deweloperskim. Jest to szczególnie ważne, jeśli SimpleCov znalazł luki w twoim pokryciu testowym. Jeśli zauważysz nowe ostrzeżenia (lub błędy), które nie zostały ujawnione w istniejących testach, zrób wszystko, aby dodać pokrycie teraz.
Gratulacje, Twoja aplikacja została zaktualizowana do nowszego, wspieranego Rubiego! Twoje następne kroki będą się różnić w zależności od tego, jak i gdzie Twoja aplikacja zostanie wdrożona. Jeśli posiadasz własne serwery, prawdopodobnie będziesz miał trochę więcej pracy do wykonania, jak np. zainstalowanie Ruby, Railsów i innych zależności na tych serwerach. To jednak wykracza poza zakres tego artykułu.
Jak już to zrobisz, możesz spać trochę spokojniej wiedząc, że Twoja aplikacja Rails używa nowoczesnego Ruby. Dzięki za przeczytanie!