2012-01-19 4 views
10

Da the gemfile man page, ho appreso che ci sono due modi per importare le gemme specificate nello Gemfile. Il bundle.setup "installazione aggiunge gemme al percorso di carico di Ruby" mentre bundle.require richiederà tutte le gemme.Qual è la differenza tra bundle.setup e bundle.require

Qual è la differenza tra questi due metodi? In quale condizione dovrei usare uno di loro?

+0

Vedi http://anti-pattern.com/use-bundler-setup-instead-of-bundler-require e http://myronmars.to/ n/dev-blog/2012/12/5-reasons-to-avoid-bundler-richiedono un solido ragionamento sul motivo per cui dovresti usare l'installazione di Bundler (invece di richiedere) e quindi richiedere manualmente le tue dipendenze. –

risposta

19

Bundler.setup modifica LOAD_PATH, quindi è possibile eseguire operazioni come require 'some_gem' e funzioneranno. Ti consente di richiedere le gemme "a mano". Prima di Bundler, usando Rubygems, otterresti gran parte dello stesso effetto facendo require 'rubygems'.

Bundler.require(:default) d'altra parte richiede effettivamente tutte le gemme nel Gemfile (presupponendo che non si stiano utilizzando i gruppi, altrimenti richiede quelli nei gruppi specificati se si forniscono argomenti). È una scorciatoia per un gruppo di dichiarazioni require 'some_gem'.

Vedere http://gembundler.com/rationale.html. Nota che dicono che devi fare require 'bundler/setup' prima di fare Bundler.require, ma in pratica questo di solito non è necessario. Non uso quasi mai Bundler.setup (o require 'bundler/setup), perché ho bisogno di tutte le gemme tramite Bundler.require).

+1

Se ho capito bene, 'Bundler.setup' + una serie di istruzioni' require' è uguale a 'Bundler.require', giusto? – steveyang

+0

Sì, è vero. – Confusion

5

È necessario utilizzare Bundle.setup ed è possibile utilizzare Bundle.require.

Il punto principale del bundler è assicurarsi che le gemme definite nel Gemfile siano rese visibili all'applicazione, cioè tutte le gemme menzionate lì esattamente nelle versioni menzionate, ma non una in più. Per fare ciò, il percorso di carico è adattato. Questo è fatto da Bundle.setup.

Per utilizzare effettivamente le gemme, devono essere richieste e quindi caricate nell'applicazione. Questo può essere fatto a mano usando un numero di dichiarazioni require o automaticamente per tutte le gemme elencate nel Gemfile (o solo in alcuni gruppi) usando Bundle.require. Questo tuttavia è possibile solo dopo aver adattato il percorso di caricamento come menzionato sopra.

0

Bundle.setup non è necessario per la versione di bundler di recente. infatti, quando si esegue Bundler.require, si tenta sempre di impostare il $LOAD_PATH corretto per voi.

l'unica necessità è:

require 'bundler' Bundler.require