Rails 3: gestire le dipendenze tra le gem

9 febbraio 2010

Uno degli aspetti più fastidiosi nella gestione di un applicazione Rails 2.x era la poca efficienza nel metodo di vendoring delle dipendenze; se ricordate l’elenco delle gemme richieste doveva essere effettuato all’interno del file ‘config/environment.rb’ con questa sintassi:

  config.gem "bj"
  config.gem "aws-s3", :lib => "aws/s3"

il che portava inevitabilmente al problema ‘cosa succede se una specifica gemma è necessaria prima che l’applicazione chiami il file environment.rb?’.

Un esempio lampante in tal senso è costituito da ‘rack‘, componente vitale al funzionamento del framework e necessario ben prima della routine di inizializzazione. La versione 3.0 di Rails risolve il problema delegando la gestione delle dipendenze ad un gemma: ‘bundler‘ che a questo punto diventa l’unica che deve essere installata a priori sul computer.

Bundler legge le istruzioni relative a quali gemme installare all’interno del file Gemfile presente nella cartella principale di ogni applicazione Rails 3.0; apriamo ad esempio quello di showcase_3_0 ed esaminiamone il contenuto:

# ho rimosso le istruzioni commentate
source 'http://gemcutter.org'
gem "rails", "3.0.0.beta"
gem "sqlite3-ruby", :require => "sqlite3"

appare chiaro che in questo momento le uniche dipendenze richieste sono verso la versione 3.0 del framework e l’adapter verso il database di default, sqlite.

Supponendo di aver ricevuto showcase_3_0 via email in un archivio compresso, tutto quello che dovremmo fare per allineare il nostro ambiente alle specifiche dell’applicazione è eseguire nella root della stessa i comandi:

bundle install

La gemma, seguendo le istruzioni del file appena esaminato, popolerebbe una cartella di convenienza (normalmente all’interno della home dell’utente che ha lanciato la procedura) con tutte le dipendenze richieste preoccupandosi di includere tale cartella nei percorsi di load dell’applicazione e sollevando noi da tediose procedure di setup.

Se invece dovessimo essere noi a dover distribuire quanto creato non dovremmo far altro che digitare:

bundle pack

per includere i singoli file .gem che compongono l’albero delle dipendenze, specificato in Gemfile, all’interno della cartella vendor/cache dell’applicazione; tale percorso è infatti il primo ad essere scandagliato da bundler alla ricerca di gemme durante il comando install.

Nella seconda parte dell’articolo: strutturare le query con l’algebra relazionale e le migliorie sotto il profilo RESTful.

Se vuoi aggiornamenti su Rails 3: gestire le dipendenze tra le gem inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Rails 3: gestire le dipendenze tra le gem

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy