Ruby on Rails
Gems
Ricerca…
Osservazioni
Documentazione Gemfile
Per i progetti che dovrebbero crescere, è una buona idea aggiungere commenti al tuo Gemfile
. In questo modo, anche in configurazioni di grandi dimensioni, saprai ancora cosa fa ogni gemma, anche se il nome non è auto-esplicativo e lo hai aggiunto 2 anni fa.
Questo può anche aiutarti a ricordare perché hai scelto una determinata versione e di conseguenza rivalutare in seguito i requisiti della versione.
Esempi:
# temporary downgrade for TeamCity
gem 'rake', '~> 10.5.0'
# To upload invoicing information to payment provider
gem 'net-sftp'
Cos'è una gemma?
Una gemma è l'equivalente di un plugin o un'estensione per il linguaggio di programmazione ruby.
Per essere precisi anche i binari non sono altro che una gemma. Molte gemme sono costruite su rotaie o altre gemme (dipendono dalla gemma) o sono indipendenti.
Nel tuo progetto Rails
Gemfile
Per il tuo progetto Rails hai un file chiamato Gemfile
. Qui puoi aggiungere le gemme che desideri includere e utilizzare nel tuo progetto. Una volta aggiunto, è necessario installare la gemma usando il bundler
(vedere la sezione Bundler).
Gemfile.lock
Una volta fatto questo, il tuo Gemfile.lock
verrà aggiornato con le gemme appena aggiunte e le loro dipendenze. Questo file blocca le gemme utilizzate in modo che utilizzino quella versione specifica dichiarata in quel file.
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)
Questo esempio è per la gemma devise
. Nel file Gemfile.lock
viene dichiarata la versione 4.0.3
da indicare quando si installa il progetto su un'altra macchina o sul server di produzione con la versione specificata da utilizzare.
Sviluppo
O una singola persona, un gruppo o un'intera comunità lavora e mantiene una gemma. Il lavoro svolto è di solito rilasciato dopo alcuni issues
sono stati risolti o features
sono state aggiunte.
Di solito le versioni seguono il principio di Semantic Versioning 2.0.0 .
Bundler
Il modo più semplice per gestire e gestire le gemme è utilizzare il bundler
. Bundler è un gestore di pacchetti paragonabile a Bower.
Per usare bundler devi prima installarlo.
gem install bundler
Dopo aver installato ed eseguito il bundler, tutto ciò che devi fare è aggiungere gemme al tuo Gemfile
ed eseguire
bundle
nel tuo terminale. Questo installa le gemme appena aggiunte al tuo progetto. In caso di problemi, riceverai un messaggio nel tuo terminale.
Se sei interessato a maggiori dettagli, ti suggerisco di dare un'occhiata ai documenti .
Gemfiles
Per iniziare, i gemfile richiedono almeno un'origine, sotto forma di URL per un server RubyGems.
Genera un Gemfile con il sorgente rubygems.org predefinito eseguendo il bundle init
. Usa https in modo che la tua connessione al server venga verificata con SSL.
source 'https://rubygems.org'
Quindi, dichiara le gemme di cui hai bisogno, compresi i numeri di versione.
gem 'rails', '4.2.6'
gem 'rack', '>=1.1'
gem 'puma', '~>3.0'
La maggior parte degli specificatori di versione, come> = 1.0, sono autoesplicativi. Lo specificatore ~> ha un significato speciale. ~> 2.0.3 è identico a> = 2.0.3 e <2.1. ~> 2.1 è identico a> = 2.1 e <3.0. ~> 2.2.beta corrisponderà alle versioni prerelease come 2.2.beta.12.
I repository Git sono anche fonti gemme valide, purché il repository contenga una o più gemme valide. Specificare cosa controllare con :tag
:branch
, o :ref
. L'impostazione predefinita è il ramo master
.
gem 'nokogiri', :git => 'https://github.com/sparklemotion/nokogiri', :branch => 'master'
Se desideri utilizzare una gemma decompressa direttamente dal filesystem, imposta semplicemente l'opzione: path al percorso contenente i file della gem.
gem 'extracted_library', :path => './vendor/extracted_library'
Le dipendenze possono essere inserite in gruppi. I gruppi possono essere ignorati al momento dell'installazione (usando --without
) o richiesti contemporaneamente (usando Bundler.require
).
gem 'rails_12factor', group: :production
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
gem 'dotenv-rails'
end
Puoi specificare la versione richiesta di Ruby nel Gemfile con ruby
. Se il Gemfile è caricato su una diversa versione di Ruby, Bundler solleverà un'eccezione con una spiegazione.
ruby '2.3.1'
Gemsets
Se stai usando RVM(Ruby Version Manager)
allora usare un gemset
per ogni progetto è una buona idea. Un gemset
è solo un contenitore che puoi usare per tenere le gemme separate l'una dall'altra. La creazione di un gemset
per progetto ti consente di cambiare le gemme (e le versioni gem) per un progetto senza rompere tutti gli altri tuoi progetti. Ogni progetto deve solo preoccuparsi delle proprie gemme.
RVM
fornisce (> = 0.1.8) un interprete @global gemset
per ruby. Le gemme che installi sul @global gemset
per un dato rubino sono disponibili per tutti gli altri set di gemme che crei in associazione con quel rubino. Questo è un buon modo per consentire a tutti i tuoi progetti di condividere lo stesso gioi installato per una specifica installazione dell'interprete ruby.
Creazione di gemme
Supponiamo che tu abbia già installato ruby-2.3.1
e tu lo abbia selezionato usando questo comando:
rvm use ruby-2.3.1
Ora per creare gemset per questa versione rubino:
rvm gemset create new_gemset
dove new_gemset
è il nome di gemset. Per vedere l'elenco di gemsets disponibili per una versione ruby:
rvm gemset list
per elencare le gemme di tutte le versioni di rubino:
rvm gemset list_all
usare un gemset dalla lista (supponiamo che new_gemset
sia il gemset che voglio usare):
rvm gemset use new_gemset
puoi anche specificare la versione rubino con il gemset se vuoi passare ad un'altra versione di rubino:
rvm use ruby-2.1.1@new_gemset
per specificare un gemset predefinito per una particolare versione ruby:
rvm use 2.1.1@new_gemset --default
per rimuovere tutte le gemme installate da un gemset puoi svuotarlo tramite:
rvm gemset empty new_gemset
per copiare un gioiello da un rubino all'altro puoi farlo da:
rvm gemset copy 2.1.1@rails4 2.1.2@rails4
eliminare un gemset:
rvm gemset delete new_gemset
per vedere il nome attuale del gemset:
rvm gemset name
installare una gemma nel gemset globale:
rvm @global do gem install ...
Inizializzazione dei set di gemme durante le installazioni di Ruby
Quando installi un nuovo ruby, RVM non solo crea due gemsets (il default, il gemset vuoto e il gemset globale), ma usa anche una serie di file modificabili dall'utente per determinare quali gemme installare.
Lavorando in ~/.rvm/gemsets
, ~/.rvm/gemsets
cerca global.gems
e default.gems
usando una global.gems
albero in base alla stringa ruby da installare. Utilizzando l'esempio di ree-1.8.7-p2010.02
, ree-1.8.7-p2010.02
controllerà (e importerà da) i seguenti file:
~/.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
Ad esempio, se hai modificato ~/.rvm/gemsets/global.gems
aggiungendo queste due righe:
bundler
awesome_print
ogni volta che installi un nuovo rubino, queste due gemme vengono installate nel tuo gemst globale. global.gems
file default.gems
e global.gems
vengono solitamente sovrascritti durante l'aggiornamento di rvm.