2010-01-22 19 views
109

Corriendo 'sudo gem list --local' y 'gem list --local' me da resultados que difieren. Mi ruta de la gema se establece en mi carpeta de inicio y solo contiene las gemas de 'gem list --local'.'sudo gem install' o 'gem install' y ubicaciones de gemas

Probablemente no sea bueno tener gemas instaladas en diferentes directorios en mi computadora, así que ¿debo tener la ruta de la gema establecida de manera diferente, y siempre debo usar sudo al instalar algo?

my ~/.profile 
export PATH=/opt/local/bin:/opt/local/sbin:$PATH 
export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH" 

~/.bash_profile is empty.

+0

Creo que esta es una pregunta válida para aquellos de nosotros que tenemos que usar una gema que requiere privilegios de root. – Kelly

+0

Relacionados: http://stackoverflow.com/questions/21141584/rails-is-not-using-my-global-ruby-version. Uso rbenv para administrar versiones de Ruby y encontré un problema porque utilicé 'sudo gem install rails' en lugar de' gem install rails'. – Dennis

+3

"Creo que esta es una pregunta válida para aquellos de nosotros que tenemos que usar una gema que requiere privilegios de root". Creo que cualquier gema que necesite privilegios de root, ya sea para instalarla o ejecutarla, es muy sospechosa.Las gemas deberían poder ejecutarse en un entorno limitado y ejecutarse con los permisos del usuario. –

Respuesta

129

Al contrario de todas las otras publicaciones, sugiero NO usar sudo al instalar gemas.

En lugar de eso recomiendan instalar RVM y empezar una vida feliz con casas portátiles y gema versión diferente de Rubí todos los que viven bajo un mismo techo.

Para los no iniciados, desde the documentation:

RVM es una herramienta de línea de comandos que nos permite instalar fácilmente, gestionar y trabajar con múltiples entornos de rubí y conjuntos de joyas.

La razón por la instalación de las gemas con sudo es peor que gem install es porque instala las gemas para TODOS LOS USUARIOS como root. Esto podría estar bien si eres la única persona que usa la máquina, pero si no lo estás puede causar rareza.

Si decide que quiere deshacerse de todas sus gemas y empezar de nuevo, es mucho más fácil y más seguro hacerlo como usuario no root.

Si decide que desea utilizar RVM a continuación, utilizando sudo provocará todo tipo de rareza, ya que cada versión de Ruby se instala a través RVM tiene su propio GEM_HOME.

Además, es agradable si puede hacer que su entorno de desarrollo se encuentre lo más cerca posible de su entorno de producción, y en la producción probablemente instalará gemas como usuario no root.

+11

+1 para la sugerencia rvm, pero -1 para la confusa condena de la posibilidad alternativa de simplemente usar sudo – tfwright

+0

Realmente no es tan confuso. http://rvm.beginrescueend.com/gems/ – jonnii

+0

@floyd, actualizó la publicación con más razones para no usar sudo. – jonnii

93

También puede instalar las gemas en su entorno local (sin sudo) con

gem install --user-install <gemname> 

le recomiendo que para que no se metan con su configuración de nivel de sistema, incluso si se trata de un ordenador de un solo usuario.

Puede consultar a dónde van las gemas mirando gempaths con gem environment. En mi caso es "~/.gem/ruby ​​/ 1.8".

Si necesita algunos binarios de instalaciones locales añadido a su ruta, se puede añadir algo a su bashrc como:

if which ruby >/dev/null && which gem >/dev/null; then 
    PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH" 
fi 

(desde http://guides.rubygems.org/faqs/#user-install)

+16

+1 para esta opción en lugar de las soluciones "Otra herramienta de configuración" más arriba, RBENV/RVM. – jjpe

+0

Estoy creando una gema y de acuerdo con los manuales que tengo que hacer 'rake install' y para arreglar el sudo isse, tuve que parchear manualmente la' /Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rb' agregando '--user-install' allí. No se puede encontrar una mejor solución, porque parece que 'rake install' no acepta parámetros adicionales. – Nakilon

+0

Estoy absolutamente encantado con ese primer comando. He estado intentando instalar gemas y he tenido problemas porque no tengo privilegios sudo. Ese comando funcionó !!!! –

2

Puede instalar gemas en una carpeta específica (ejemplo vendedor /) en su aplicación Rails usando:

bundle install --path vendor 
+0

Esto. En estos días, el único programa que debería necesitar sudo para instalar el software es su administrador de paquetes. – tjbp

3
sudo gem install --no-user-install <gem-name> 

instalará su gema globalmente, es decir, estará disponible para todos los contextos del usuario.

+0

También puede sobrescribir una gema instalada por el proveedor, que ese sistema operativo podría esperar establecer en una versión específica. Y eso podría romper el código que se basa en él. –

7

Relacionados (para usuarios bundler), si desea una alternativa más ligera a RVM que poner todo en un directorio conocido específica del usuario, le recomiendo usar:

bundle install --path $HOME/.gem 

si desea instalar gemas para el mismo lugar que

gem install --user-install GEMNAME 

los instalará, .gem/ruby/RUBYVERSION en su directorio raíz. (Véase el otro comentario sobre esta pregunta sobre --user-install.)

Esto hará que las gemas visible para gem list, instalable a través gem uninstall, etc. sin necesidad de sudo acceso. secuencias de comandos ejecutables instalados por gema o bundler se pueden poner en su camino mediante la adición de

$HOME/.gem/ruby/RUBYVERSION/bin 

a su $PATH. gem en sí mismo le informa sobre esto si no está configurado cuando lo hace gem install --user-install.

26

Mejor aún, puesto --user-install en su archivo ~/.gemrc para que no tenga que escribirla cada vez que

gem: --user-install 
5

en caso de que

  • instaladas las gemas de rubí con sudo
  • desea instalar gemas sin sudo
  • no desea instalar rvm/rbenv

añadir lo siguiente a su .bash_profile:

export GEM_HOME=/Users/‹your_user›/.gem 
export PATH="$GEM_HOME/bin:$PATH" 

Abrir una nueva pestaña en el terminal o source ~/.bash_profile y ya está bueno para ir!

+2

Para alguien que no trabaja con Ruby, Rails, Rake y cualquier otra cosa que Ruby Devs use/quiera usar ESTA solución es mucho más fácil que usar rvm. Realmente no me importa tener diferentes versiones de rubí. Solo quiero ejecutar algunos programas de shell distribuidos como gemas. ¡Gracias! –

Cuestiones relacionadas