Ruby on Rails
Klejnoty
Szukaj…
Uwagi
Dokumentacja Gemfile
W przypadku projektów, które mają wzrosnąć, dobrym pomysłem jest dodanie komentarzy do Gemfile
. W ten sposób, nawet w dużych konfiguracjach, będziesz nadal wiedział, co robi każdy klejnot, nawet jeśli nazwa nie jest oczywista i dodałeś ją 2 lata temu.
Pomoże to również zapamiętać, dlaczego wybrałeś określoną wersję, a następnie ponownie ocenisz wymagania dotyczące wersji.
Przykłady:
# temporary downgrade for TeamCity
gem 'rake', '~> 10.5.0'
# To upload invoicing information to payment provider
gem 'net-sftp'
Co to jest klejnot?
Klejnot jest odpowiednikiem wtyczki lub rozszerzenia języka programowania ruby.
Dokładnie mówiąc, nawet szyny to nic więcej niż klejnot. Wiele klejnotów jest zbudowanych na szynach lub innych klejnotach (zależą od tego klejnotu) lub są samodzielne.
W twoim projekcie Rails
Gemfile
Dla projektu Rails masz plik o nazwie Gemfile
. Tutaj możesz dodać klejnoty, które chcesz uwzględnić i wykorzystać w swoim projekcie. Po dodaniu musisz zainstalować klejnot, korzystając z programu bundler
(patrz sekcja Bundler).
Gemfile.lock
Gdy to zrobisz, Twój Gemfile.lock
zostanie zaktualizowany o nowo dodane klejnoty i ich zależności. Ten plik blokuje używane klejnoty, więc używają określonej wersji zadeklarowanej w tym pliku.
GEM
remote: https://rubygems.org/
specs:
devise (4.0.3)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 4.1.0, < 5.1)
responders
warden (~> 1.2.3)
Ten przykład jest za gem devise
. W Gemfile.lock
zadeklarowano wersję 4.0.3
, aby podczas instalacji projektu na innym komputerze lub na serwerze produkcyjnym określić, której wersji użyć.
Rozwój
Albo jedna osoba, grupa lub cała społeczność pracuje i utrzymuje klejnot. Praca wykonywana jest zwykle uwalniane po pewne issues
zostały ustalone lub features
zostały dodane.
Zwykle wydania są zgodne z zasadą Semantic Versioning 2.0.0 .
Bundler
Najłatwiejszym sposobem obsługi i zarządzania klejnotami jest użycie bundler
. Bundler jest menedżerem pakietów porównywalnym z altaną.
Aby użyć bundlera, musisz go najpierw zainstalować.
gem install bundler
Po skonfigurowaniu pakietu i wszystko, co musisz zrobić, to dodać klejnoty do Gemfile
i uruchomić
bundle
w twoim terminalu. Spowoduje to zainstalowanie nowo dodanych klejnotów w projekcie. W przypadku pojawienia się problemu w terminalu pojawi się monit.
Jeśli jesteś zainteresowany bardziej szczegółowymi informacjami, sugeruję zajrzeć do dokumentacji .
Gemfiles
Na początek pliki gem wymagają co najmniej jednego źródła, w postaci adresu URL serwera RubyGems.
Wygeneruj plik Gemfile z domyślnym źródłem rubygems.org, uruchamiając bundle init
. Użyj protokołu https, aby Twoje połączenie z serwerem zostało zweryfikowane za pomocą protokołu SSL.
source 'https://rubygems.org'
Następnie zadeklaruj klejnoty, których potrzebujesz, w tym numery wersji.
gem 'rails', '4.2.6'
gem 'rack', '>=1.1'
gem 'puma', '~>3.0'
Większość specyfikatorów wersji, takich jak> = 1.0, nie wymaga wyjaśnień. Specyfikator ~> ma specjalne znaczenie. ~> 2.0.3 jest identyczny z> = 2.0.3 i <2.1. ~> 2.1 jest identyczne z> = 2.1 i <3.0. ~> 2.2.beta będzie pasować do wersji wstępnych, takich jak 2.2.beta.12.
Repozytoria Git są również prawidłowymi źródłami klejnotów, o ile repozytorium zawiera jeden lub więcej prawidłowych klejnotów. Określ, co chcesz sprawdzić za pomocą :tag
:branch
lub :ref
. Domyślnie jest to master
oddziału.
gem 'nokogiri', :git => 'https://github.com/sparklemotion/nokogiri', :branch => 'master'
Jeśli chcesz użyć rozpakowanego klejnotu bezpośrednio z systemu plików, po prostu ustaw opcję: path na ścieżkę zawierającą pliki klejnotu.
gem 'extracted_library', :path => './vendor/extracted_library'
Zależności można umieszczać w grupach. Grupy można zignorować w czasie instalacji (używając - --without
) lub wymagać jednocześnie (używając Bundler.require
).
gem 'rails_12factor', group: :production
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
gem 'dotenv-rails'
end
Możesz podać wymaganą wersję Ruby w Gemfile za pomocą ruby
. Jeśli Gemfile zostanie załadowany w innej wersji Ruby, Bundler zgłosi wyjątek z wyjaśnieniem.
ruby '2.3.1'
Gemsety
Jeśli używasz RVM(Ruby Version Manager)
dobrym pomysłem jest użycie gemset
dla każdego projektu. Zestaw gemset
to tylko pojemnik, którego można użyć do oddzielenia klejnotów. Utworzenie gemset
każdego projektu umożliwia zmianę klejnotów (i wersji klejnotów) dla jednego projektu bez przerywania wszystkich innych projektów. Każdy projekt musi martwić się tylko o własne klejnoty.
RVM
zapewnia (> = 0.1.8) zestaw @global gemset
na interpretera ruby. Klejnoty instalowane w @global gemset
dla danego rubinu są dostępne dla wszystkich innych zestawów klejnotów tworzonych w związku z tym rubinem. Jest to dobry sposób, aby umożliwić wszystkim twoim projektom udostępnianie tego samego zainstalowanego klejnotu dla konkretnej instalacji interpretera ruby.
Tworzenie zestawów klejnotów
Załóżmy, że masz już zainstalowany ruby-2.3.1
i wybrałeś go za pomocą tego polecenia:
rvm use ruby-2.3.1
Teraz, aby utworzyć zestaw gem dla tej wersji ruby:
rvm gemset create new_gemset
gdzie new_gemset
to nazwa zestawu gemset. Aby zobaczyć listę dostępnych zestawów klejnotów dla wersji ruby:
rvm gemset list
aby wyświetlić klejnoty wszystkich wersji ruby:
rvm gemset list_all
aby użyć zestawu gem z listy (załóżmy, że new_gemset
to zestaw, którego chcę użyć):
rvm gemset use new_gemset
możesz także określić wersję ruby za pomocą zestawu gem, jeśli chcesz przejść do innej wersji ruby:
rvm use ruby-2.1.1@new_gemset
aby określić domyślny zestaw gem dla konkretnej wersji ruby:
rvm use 2.1.1@new_gemset --default
aby usunąć wszystkie zainstalowane klejnoty z zestawu, możesz go opróżnić poprzez:
rvm gemset empty new_gemset
aby skopiować zestaw gemów z jednego rubinu na inny, możesz to zrobić poprzez:
rvm gemset copy 2.1.1@rails4 2.1.2@rails4
aby usunąć zestaw:
rvm gemset delete new_gemset
aby zobaczyć aktualną nazwę zestawu gemset:
rvm gemset name
aby zainstalować klejnot w globalnym zestawie klejnotów:
rvm @global do gem install ...
Inicjowanie zestawów gemów podczas instalacji Ruby
Kiedy instalujesz nowy rubin, RVM nie tylko tworzy dwa zestawy klejnotów (domyślny, pusty zestaw klejnotów i zestaw globalny), ale także używa zestawu plików edytowalnych przez użytkownika, aby określić, które klejnoty zainstalować.
Praca w ~/.rvm/gemsets
, Przeszukuje RVM dla global.gems
i default.gems
korzystających drzewo-hierarchię opartą na strunie ruby jest zainstalowany. Na przykładzie ree-1.8.7-p2010.02
rvm sprawdzi (i zaimportuje) następujące pliki:
~/.rvm/gemsets/ree/1.8.7/p2010.02/global.gems
~/.rvm/gemsets/ree/1.8.7/p2010.02/default.gems
~/.rvm/gemsets/ree/1.8.7/global.gems
~/.rvm/gemsets/ree/1.8.7/default.gems
~/.rvm/gemsets/ree/global.gems
~/.rvm/gemsets/ree/default.gems
~/.rvm/gemsets/global.gems
~/.rvm/gemsets/default.gems
Na przykład, jeśli edytowałeś ~/.rvm/gemsets/global.gems
, dodając te dwa wiersze:
bundler
awesome_print
Za każdym razem, gdy instalujesz nowy rubin, te dwa klejnoty są instalowane w twoim globalnym zestawie. Pliki default.gems
i global.gems
są zwykle nadpisywane podczas aktualizacji rvm.