2012-05-03 4 views
16

Per chiarire, sto usando rbenv per gestire le mie versioni di ruby. Ho avuto l'impressione che i binari siano gestiti come shims nella rispettiva directory di versione ruby.Sto usando rbenv, quindi perché ci sono due percorsi Gem sul mio sistema? (OS X Lion)

Ecco ciò che il mio sistema mostra quando corro ambiente gemma (sto escluse le parti irrilevanti):

- GEM PATHS: 
    - /Volumes/Data/nathan/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1 
    - /Volumes/Data/nathan/.gem/ruby/1.9.1 

Qual è il motivo per avere due posizioni? Le menti curiose vogliono sapere.

risposta

15

Penso di aver capito la risposta a questa domanda, quindi la posterò.

Rbenv consente una versione globale e/o locale del rubino. Quindi, una volta installato e gestito un rubino tramite rbenv, è possibile dichiararlo come una versione ruby ​​globale utilizzata dall'intero sistema.

Allo stesso modo, è possibile dichiarare una versione locale di ruby ​​all'interno di una determinata directory (es: un progetto specifico di rotaie).

Il file .gem nel percorso home è utilizzato dalla versione globale di ruby, dove come quello nascosto nella directory rbenv viene utilizzato dalla versione ruby ​​locale.

Nota, è possibile (per qualsiasi motivo) dichiarare una versione locale uguale alla versione globale. In tal caso, la versione locale si baserà sui file gem presenti nella directory rbenv più profonda, invece della directory ~/.gem.

+6

Io uso 'gem quale% gemname%' per determinare il percorso in cui è installato gem. – pavelpopov

2
- /Volumes/Data/nathan/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1 

da rbenv, così rubino cerca le gemme rbenv installate.

- /Volumes/Data/nathan/.gem/ruby/1.9.1 

A quanto pare, rbenv non si limita alle proprie gemme, ma piuttosto include le gemme dal rubino sistema pure, ma solo quelli che vengono installati come utente (via gem --user-install).

+0

Beh, è ​​proprio così ... Non ho installato gemme in questo modo. Ho fatto un'installazione pulita del sistema operativo, installato homebrew> rbenv> ruby> rails. Ho anche impostato il ruby ​​globale immediatamente tramite rbenv prima di installare i binari. Dal mio progetto di rotaie, uso bundler e il Gemfile. Quindi ... non riesco a vedere perché esiste questa directory. – Nathan

+0

Controlla '$ GEM_PATH'. – Reactormonk

+3

Intendi? echo $ GEM_PATH? Non restituisce nulla. – Nathan

5

Ricordare che i manager delle versioni di ruby ​​come rbenv e rvm sono creazioni relativamente recenti. Prima che esistessero, un utente amministratore di solito installava ruby ​​in un percorso a livello di sistema come/usr/local. Ma i non amministratori avevano bisogno di un posto dove installare le proprie gemme, poiché non avevano il permesso di scrittura in/usr/local. Quindi i creatori di rubygems hanno deciso di aggiungere un percorso gem secondario nella home directory dell'utente corrente, che avrebbe una struttura simile all'ubicazione del sistema.

Ecco un esempio di ciò che i percorsi di gemme sembravano ai vecchi tempi:

- /usr/local/lib/ruby/gems/1.9.1 
- /Users/kelvin/.gem/ruby/1.9.1 

Ci può essere ancora macchine in cui rubino è installato come questo, e avete ancora che il ricorso del percorso automatica gemma secondaria . Naturalmente puoi anche aggiungere altri percorsi usando la variabile d'ambiente GEM_PATH, ma quella automatica è utile per gestire il caso comune.

Se si dispone dei diritti di amministratore o si utilizza un gestore delle versioni, è possibile ignorare la directory ~/.gem come un artefatto, una reliquia del passato, se lo si desidera.