Co to jest Rubinowy klejnot?

Kiedy po raz pierwszy dowiedziałem się o Rubinowych klejnotach, wydawały się one dość magiczne. Przez uruchomienie bundle install mogłem w jakiś sposób zdobyć te magiczne klejnoty, które sprawiłyby, że mój kod robiłby różne rzeczy, które wydawały się wykraczać poza moje umiejętności studenta Flatiron z pierwszego tygodnia. Podobnie jak „skrzynki z przedmiotami” w Mario Kart, klejnoty wydają się obdarzać użytkownika super mocami.

Klejnoty rubinowe dają ci magiczne moce!

Zamierzam używać mojego bloga do zagłębiania się w koncepcje programowania, które wzbudzają moją ciekawość i których nie do końca rozumiem. W moim pierwszym wpisie na blogu, zamierzam obalić mistyczną, magiczną naturę klejnotów Ruby.

Co to jest klejnot Ruby?

Nie, klejnoty Ruby nie są magią. Są to po prostu biblioteki open source, które zawierają kod Rubiego i są spakowane z dodatkowymi danymi. Użycie klejnotu pozwala programiście na użycie kodu z klejnotu w jego własnym programie, bez konieczności wyraźnego wstawiania tego kodu.

Klejnoty mogą być używane do różnych celów, i możesz poznać różne klejnoty na https://rubygems.org/. Aby lepiej zrozumieć, co mogą robić klejnoty, oto kilka popularnych klejnotów i ich funkcjonalność:

  • Bundler – Zapewnia spójne środowisko dla projektów Rubiego poprzez śledzenie i instalowanie dokładnie tych klejnotów i wersji, które są potrzebne. Jest to #1 pobrany klejnot wszech czasów, ale więcej o Bundlerze później.
  • RSpec – framework testujący, który wspiera Behavior Driven Development dla Ruby.
  • Devise – Devise działa z uwierzytelnianiem. Dla każdej strony, która potrzebuje logowania użytkownika, Devise obsługuje logowanie, zapisywanie się, resetowanie hasła itp.
  • JSON – Udostępnia API do parsowania JSON z tekstu.
  • Nokogiri – Udostępnia parsery HTML, XML, SAX i Reader z obsługą XPath i selektorów CSS.
  • Rails – Rails to klejnot! Rails dostarcza pełnowartościowy framework, który pozwala na przekształcenie Ruby w aplikacje internetowe.

Instalacja klejnotów

Dzisiaj używanie klejnotów jest proste! Lokalna instalacja klejnotów jest tak prosta, jak jedno polecenie: gem install . Polecenie install pobiera kod, ściąga go na twój komputer, instaluje klejnot i wszelkie niezbędne zależności. Na koniec, zbuduje dokumentację dla zainstalowanych klejnotów.

Instalacja bundlera wymaga tylko instalacji 1 klejnotu

Choć niektóre klejnoty, jak Bundler, wymagają tylko instalacji 1 klejnotu, inne mają zależności, które wymagają instalacji wielu klejnotów:

Instalacja Drapera wymagała również instalacji gemów Request Store i Active Model Serializers

Aby zobaczyć wszystkie lokalnie zainstalowane gemy, użyj polecenia, gem list .

Używanie klejnotów

A teraz, co ważniejsze, jak możemy używać naszych zainstalowanych klejnotów? Cóż, to zależy od typu klejnotu. Niektóre klejnoty, jak Rails, są samodzielnymi programami Rubiego, które możesz uruchomić z poziomu komendy.

Inne są stosunkowo bezużyteczne same w sobie, ale niesamowicie pomocne, gdy są używane w projekcie. Aby użyć gem’a w swoim kodzie, należy go najpierw zażądać na górze pliku – require 'gem_name' . Dla przykładu, Pry szybko stał się jednym z moich ulubionych klejnotów podczas pracy nad projektami. Mój kod i̶s̶s̶n̶’̶t̶ ̶a̶l̶w̶a̶y̶s̶ prawie nigdy nie jest poprawny, kiedy piszę go po raz pierwszy, a Pry sprawia, że debugowanie jest o wiele bardziej wydajne i trochę mniej bolesne. W tym tygodniu uczyliśmy się o API i potrzebowaliśmy Pry oraz kilku innych klejnotów do ukończenia projektu.

Choć klejnoty są bardzo proste, jeśli potrzebujesz ich tylko na swoim komputerze, stają się nieco bardziej skomplikowane, jeśli chcesz rozpowszechniać lub publikować swój projekt. Każda osoba, która uruchomi Twój projekt będzie musiała mieć zainstalowane wszystkie niezbędne klejnoty i ich poprawne wersje na swoim komputerze. Na szczęście mamy RubyGems i Bundlera, które usprawniają ten proces.

RubyGems jest frameworkiem, który upraszcza dzielenie się klejnotami

Częścią magii klejnotów jest to, że wszyscy możemy ich używać, a RubyGems jest menedżerem pakietów, który to umożliwia. Dostarcza standardowy format dla dystrybucji klejnotów Ruby, zarządza instalacją klejnotów, oraz serwer do ich dystrybucji. RubyGems nie został udostępniony publicznie aż do 14 marca 2004 (Dzień Liczby Pi! π) Chociaż RubyGems istnieje od Ruby 1.8, nie był częścią standardowej dystrybucji Rubiego aż do Ruby 1.9. Tak więc dla początkujących użytkowników Rubiego, takich jak ja, RubyGems jest automatycznie instalowany na twoim komputerze kiedy instalujesz Rubiego.

Jak Rubyści kiedykolwiek żyli bez RubyGems?

Życie było o wiele trudniejsze. Jeśli chcesz poznać pełną historię, gorąco polecam obejrzenie prezentacji André Arko „How does Bundler work, anyway?” z RailsConf 2015. Oto moja podsumowana wersja:

Ładowanie kodowania rozpoczęło się od require , a użycie require jest zasadniczo takie samo jak wstawienie kodu do twojego pliku. W najprostszej formie jest to metoda, która wydobywa kod z pliku argumentu.

def require(filename)
eval File.name(filename)
end

Require pozwala użytkownikom załadować dowolny lokalny kod, przeszukując $LOAD_PATH użytkownika w poszukiwaniu pliku. $LOAD_PATH jest zmienną globalną i tablicą ścieżek bezwzględnych. Tak długo, jak katalog kodu znajduje się gdzieś w $LOAD_PATH, require będzie w stanie go znaleźć.

Choć require jest świetny dla lokalnego kodu, co by było, gdybyś chciał uzyskać kod od kogoś innego? Był to żmudny proces – musiałbyś znaleźć kod, pobrać go, zapisać gdzieś na swoim komputerze i dodać to gdzieś do $LOAD_PATH.

W rezultacie, setup.rb ewoluował, aby ułatwić ten proces. Setup.rb (który istnieje do dziś) jest ogólnym instalatorem dla skryptów i bibliotek Rubiego. Był on dużym usprawnieniem w stosunku do require ponieważ kopiował wszystkie pliki Rubiego do katalogu, który był już w $LOAD_PATH. Programiści są z natury leniwi, a setup.rb oszczędził nam kilku kroków. Jednakże, setup.rb miał swój własny zestaw problemów. Nie było żadnego śledzenia wersji ani sposobu na odinstalowanie programu! Jedynym sposobem, aby dowiedzieć się, jaką wersję posiadasz, było zapisanie numeru wersji podczas instalacji. Jak możesz sobie wyobrazić, używanie bibliotek było trochę nieudane.

W 2004 roku, RubyGems przyszedł na ratunek! Teraz kod innych ludzi, lub klejnoty, mogły być instalowane lub odinstalowywane za pomocą jednej komendy! To było rewolucyjne. RubyGems miał jeszcze jedną sztuczkę w rękawie – mógł obsługiwać różne wersje oprogramowania, a każda wersja była trzymana w swoim własnym, oddzielnym folderze.

Bundler rozwiązuje problemy z zależnościami Gem

Tak niesamowite jak wydawało się RubyGems, miało jedną nieodłączną wadę. Jeśli chciałeś udostępnić projekt, jak mogłeś się upewnić, że nowy użytkownik posiada wszystkie niezbędne klejnoty? W obecnej konfiguracji RubyGems, jeśli programista uruchomił gem install foo i zaczął używać nowego klejnotu w aplikacji, inni programiści w projekcie musieliby zostać poinformowani o konieczności uruchomienia gem install foo. Niektóre klejnoty mogły działać tylko z pewnymi wersjami innych klejnotów, a koordynacja zależności między klejnotami i wersjami stawała się coraz trudniejsza.

Alas, dochodzimy do Bundlera! Bundler istnieje aby rozwiązać problem zależności wersji gemów poprzez śledzenie i instalowanie dokładnie tych gemów i wersji, które są potrzebne. Bundler działa poprzez „gemfile” Rubiego, który mówi Bundlerowi jakich klejnotów ma szukać i gdzie ich szukać. https://rubygems.org jest domyślnym źródłem, ale jeśli klejnoty istnieją na prywatnym serwerze, to źródło może zostać nadpisane dla tych konkretnych klejnotów.

Przykładowy Gemfile – Źródło: http://bundler.io/rationale.html

Po zainstalowaniu wymaganych gemów (jeśli twój komputer jeszcze ich nie posiada), Bundler zapisze wszystkie gemy i wersje, które zainstalował, do innego pliku, Gemfile.lock. Ten plik lock umożliwia zainstalowanie dokładnie tych samych wersji na każdym komputerze, który uruchamia aplikację.

Używanie Bundlera jest proste. Po pierwsze, należy go zainstalować, a ponieważ Bundler sam w sobie jest klejnotem, możemy to zrobić za pomocą: gem install bundler . Mając zainstalowanego Bundlera, możesz użyć dowolnego klejnotu w swoim projekcie w dwóch krokach:

  1. Dodaj klejnot do Gemfile w korzeniu projektu
  2. Uruchom bundle install w terminalu

Po więcej szczegółów na temat Bundlera, sprawdź http://bundler.io/.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.