2012-05-03 6 views
16

Para aclarar, estoy usando rbenv para administrar mis versiones de ruby. Tenía la impresión de que los binarios se administran como shims en su respectivo directorio de versiones ruby.Estoy usando rbenv, ¿por qué hay dos rutas de Gem en mi sistema? (OS X Lion)

Esto es lo que muestra mi sistema cuando corro entorno de la gema (estoy excluyendo las partes irrelevantes):

- 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 

algún motivo para tener dos lugares? Mentes curiosas quieren saber.

Respuesta

15

Creo que encontré la respuesta a esta pregunta, así que la publicaré.

Rbenv permite una versión global y/o local de ruby. Así que una vez que se instala y gestiona ruby ​​a través de rbenv, puede declararlo como una versión global de ruby ​​utilizada por todo su sistema.

Del mismo modo, puede declarar una versión de ruby ​​local dentro de un directorio determinado (por ejemplo, un proyecto de rieles específico).

El archivo .gem en su ruta base es utilizado por la versión global de ruby, donde como el que está escondido en el directorio rbenv es utilizado por la versión local de ruby.

Nota, puede (por cualquier razón) declarar una versión local que sea la misma que la versión global. En ese caso, la versión local dependerá de los archivos gem que se encuentran en el directorio rbenv más profundo, en lugar del directorio ~/.gem.

+6

Yo uso 'gem which% gemname%' para determinar la ruta donde está instalada la gema. – pavelpopov

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

es de rbenv, por lo que ruby ​​busca las gemas rbenv instaladas.

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

Al parecer, rbenv no se limita a sus propias joyas, sino que incluye las gemas de rubí sistema así, pero sólo los que se instalan como usuario (a través de gem --user-install).

+0

Bueno, eso es ... No instalé ninguna gema de esa manera. Hice una instalación limpia del sistema operativo, instalé homebrew> rbenv> ruby> rails. También configuré el rubí global inmediatamente a través de rbenv antes de instalar los rieles. Desde mi proyecto de rieles, utilizo bundler y Gemfile. Entonces ... simplemente no puedo ver por qué existe este último directorio. – Nathan

+0

Comprueba '$ GEM_PATH'. – Reactormonk

+3

¿Te refieres? echo $ GEM_PATH? No devuelve nada. – Nathan

5

Tenga en cuenta que los gerentes de versiones ruby ​​como rbenv y rvm son creaciones relativamente recientes. Antes de que existieran, un usuario administrador generalmente instalaría ruby ​​en una ubicación de todo el sistema como/usr/local. Pero los que no son administradores necesitaban un lugar para instalar sus propias gemas, ya que no tenían permiso de escritura en/usr/local. Entonces, los creadores de rubygems decidieron agregar una ruta de gema secundaria en el directorio de inicio del usuario actual, que tendría una estructura similar a la ubicación del sistema.

He aquí un ejemplo de lo que los caminos de la gema veían como en los viejos tiempos:

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

Todavía puede haber máquinas en las que el rubí se instala de esta manera, y usted todavía tiene que el recurso de la ruta automática joya secundaria . Por supuesto, también puede agregar más rutas usando la variable de entorno GEM_PATH, pero el auto es bueno para manejar el caso común.

Si tiene derechos de administrador, o utiliza un administrador de versiones, puede simplemente ignorar el ~/.gema dir como un artefacto, una reliquia del pasado, si lo desea.

Cuestiones relacionadas