Introduzione
Man mano che le applicazioni Ruby crescono, il numero di librerie esterne utilizzate da queste applicazioni può crescere alla stessa velocità, se non più velocemente, in alcuni casi. Questa crescita può porre problemi quando le gemme installano le loro dipendenze. Se due gemme si basano su versioni diverse della stessa libreria, l'installazione di entrambe le gemme corre il rischio di creare uno scenario di errore dovuto alle incompatibilità delle gemme. Bundler, una gemma di Ruby, ti offre un modo semplice per gestire queste gemme ed evitare conflitti, permettendoti di concentrarti sul codice della tua applicazione invece di risolvere i problemi con le librerie di supporto.
Prerequisiti
- Versione Ruby – 2.2.1 o successiva
Nota:questo articolo usa vim per la modifica del testo. Sostituisci "vim" con il tuo editor preferito se preferisci utilizzare uno strumento di modifica del testo diverso. (E se ti ritrovi accidentalmente bloccato in vim, ecco alcuni suggerimenti per aiutarti a sbloccarti.)
.
Gestione di interdipendenze complesse
Man mano che la tua applicazione cresce in complessità, potresti vedere conflitti di versione nel gemset della tua applicazione. Questi conflitti possono impedire alla tua applicazione di funzionare correttamente man mano che il numero di gemme che usi e il numero di interdipendenze di gemme cresce. Potresti prendere in considerazione l'utilizzo di RVM in modo più restrittivo, ma questa soluzione ti dà solo l'opportunità di controllare l'attuale versione di Ruby e il gemset associato:non gestisce i problemi di dipendenza delle gemme, che possono verificarsi tra diverse versioni di gemme utilizzando la stessa versione base di la lingua Rubino. Passare attraverso le dipendenze di tutte le gemme per trovare questi conflitti e scaricare versioni di gemme compatibili è un processo lungo e noioso. Fortunatamente, possiamo utilizzare la gemma Bundler per gestire i nostri set di gemme ed eliminare le congetture dall'utilizzo delle librerie condivise.
.
Installazione di Bundler per gestire le gemme
Per iniziare con Bundler, dobbiamo prima installare la gem:
gem install bundler
Nota, alcune versioni di Ruby possono usare il modulo gem2.2 install bundler
.
Questo comando installa Bundler nell'ambiente di esecuzione corrente di Ruby. Successivamente, devi creare un Gemfile per gestire le gemme della tua applicazione. Aggiungi un nuovo file nella directory principale della tua applicazione e aprilo per la modifica:
vim Gemfile
Nota:Bundler, per impostazione predefinita, cerca il nome del file Gemfile
, in maiuscolo esattamente come mostrato. Fallirà, ad esempio, se invece hai chiamato il tuo file gemfile
.
Puoi aggiungere le tue gemme a questo punto o lasciare il file vuoto se non hai dipendenze gemma esterne. Bundler utilizza questo Gemfile durante il download e l'installazione di gemme per la tua applicazione.
.
Anatomia di un Gemfile
Un Gemfile ti offre molti modi diversi per gestire i set di gemme della tua applicazione. Puoi, ad esempio, specificare una nuova fonte gem nel tuo Gemfile, che verrà cercata durante l'esecuzione dell'installazione:
source 'https://rubygems.org'
Puoi facilmente aggiungere nuove dipendenze gem inserendole su singole righe, precedute dalla parola gem
. Ad esempio, la riga seguente specifica nokogiri
come dipendenza gem per la tua applicazione:
gem 'nokogiri'
Puoi anche specificare versioni gem specifiche usando la familiare sintassi di RubyGems. La riga seguente aggiunge la gemma Rails, ma la limita alla versione 3.0.0.beta3 di Rails:
gem 'rails', '3.0.0.beta3'
Puoi anche specificare gruppi di gemme che vengono eseguiti solo in ambienti specifici. Ad esempio, il blocco seguente installa rspec
, guard
e factory_girl
quando l'ambiente Rails è test
o development
:
group :test, :development do gem 'rspec' gem 'guard' gem 'factory_girl' end
Questi esempi sono solo un inizio. Ci sono una serie di altre utili funzioni di un Gemfile su bundler.io.
.
Installazione di tutte le gemme con Bundler
Dopo aver popolato il tuo Gemfile con le gemme da installare, puoi installare tutte le gemme del tuo ambiente attuale con il seguente comando:
bundle install
Questo comando analizza il tuo Gemfile e rintraccia tutte le gemme indicate dalle fonti disponibili sia sul tuo sistema che nel Gemfile stesso. Esamina tutte le gemme per le dipendenze condivise, quindi genera un nuovo file (Gemfile.lock
) che contiene tutte le gemme compatibili e le loro versioni. Infine, si sposta attraverso il Gemfile.lock
creato file, installando ogni gem rilevante. Al termine, le gemme della tua applicazione saranno disponibili per l'uso nel codice della tua applicazione.
.
Altri utili comandi del bundler
Oltre a eliminare tutti i mal di testa dalla gestione delle gemme con dipendenze condivise, Bundler ti offre anche molti altri strumenti con cui puoi gestire il set di gemme della tua applicazione. Di seguito sono riportati alcuni comandi di esempio che potresti trovare utili durante lo sviluppo:
Per aggiornare tutte le gemme nel Gemfile all'ultima versione compatibile:
bundle update
Negli ambienti di produzione, invece di risolvere dinamicamente le gemme da tutte le fonti disponibili, potresti voler installare solo le gemme specificate in Gemfile.lock.
bundle install --deployment
Per eseguire un comando nel contesto del Gemfile di un'applicazione:
bundle exec XXXX
Senza l'aggiunta di bundle exec
, il comando XXXX verrebbe eseguito nel contesto Ruby di sistema, che potrebbe contenere gemme incompatibili.
Puoi esaminare altri comandi disponibili e gli usi previsti qui.
.
Conclusione
Un problema comune tra i linguaggi di programmazione è il concetto di "inferno delle dipendenze", che sorge quando due o più librerie di terze parti si basano su versioni diverse della stessa libreria condivisa. Bundler offre agli sviluppatori Ruby uno strumento facile da usare sia per l'installazione che per la gestione di complessi set di gemme. Aiuta a risolvere tutti i problemi di dipendenza e fornisce un record di compatibilità per tutte le dipendenze dell'applicazione. Attraverso l'uso di Bundler, puoi risolvere rapidamente i conflitti nelle gemme consumate e tornare a lavorare sulla parte centrale del codice della tua applicazione.
Atlantic.Net
Atlantic.net offre hosting VPS e servizi di hosting gestito che includono un livello di servizi gestiti business-essential ai tuoi pacchetti di hosting. Contattaci oggi per ulteriori informazioni.
.
.