ruby on rails - kali - Bundler no puede instalar gemas sin sudo
ruby version (6)
Intento instalar una aplicación de rieles y cada vez que uso bundle
falla sin sudo
. Mi situación actual es que todo funciona siempre que uses sudo
para todo , incluidos los rieles. No creo que esto sea correcto
Por ejemplo:
$ bundle update
Updating git://github.com/refinery/refinerycms.git
Fetching gem metadata from https://rubygems.org/.......
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Enter your password to install the bundled RubyGems to your system:
Using rake (10.0.4)
Using i18n (0.6.1)
Using multi_json (1.7.2)
Using rack-cache (1.2)
Using rack-test (0.6.2)
Installing hike (1.2.2)
Errno::EACCES: Permission denied - /usr/local/rvm/gems/ruby-1.9.3-p194/build_info/hike-1.2.2.info
An error occurred while installing hike (1.2.2), and Bundler cannot continue.
Make sure that `gem install hike -v ''1.2.2''` succeeds before bundling.
Pero luego hago lo que dice y funciona:
$ gem install hike -v ''1.2.2''
Successfully installed hike-1.2.2
Parsing documentation for hike-1.2.2
Installing ri documentation for hike-1.2.2
Done installing documentation for hike after 0 seconds
1 gem installed
Este patrón se repite una y otra vez para diferentes gemas. No lo entiendo ¿Por qué está pasando esto? Si uso sudo
paquete se actualizará sin este error. Pero la situación actual es que necesito sudo
para todo, incluido rake...
o rails server
, etc. Algo no está bien.
Detalles adicionales: estoy en OSX 10.8.3 ...
$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.0]
$ gem -v
2.0.3
$ rvm -v
rvm 1.19.6 (stable) by Wayne E. Seguin <[email protected]>, Michal Papis <[email protected]> [https://rvm.io/]
$ which ruby
/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby
$ which gem
/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/gem
$ which rvm
/usr/local/rvm/bin/rvm
Actualizar
Puede ser informativo que puedo ejecutar sudo bundle install
sin errores. Luego, inmediatamente después de la bundle install
falla con un error como el que se ve arriba. ¿Por qué es esto?
Actualización2
/usr/local/rvm[master]$ ls -l
total 56
-rw-rw-r-- 1 root rvm 566 May 4 12:59 LICENCE
-rw-rw-r-- 1 root rvm 8929 May 4 12:59 README
-rw-rw-r-- 1 root rvm 7 May 4 12:59 RELEASE
-rw-rw-r-- 1 root rvm 7 May 4 12:59 VERSION
drwxrwsr-x 3 root rvm 102 May 4 01:34 archives
drwxrwsr-x 35 root rvm 1190 May 4 12:59 bin
drwxrwsr-x 11 root rvm 374 May 4 12:59 config
drwxrwsr-x 6 root rvm 204 Jan 10 19:55 contrib
drwxrwsr-x 5 root rvm 170 Jan 10 19:55 environments
drwxrwsr-x 3 root rvm 102 Jan 10 19:55 examples
drwxrwsr-x 5 root rvm 170 Jan 10 19:52 gems
drwxrwxr-x 6 ESL rvm 204 May 4 12:59 gemsets
drwxrwsr-x 92 root rvm 3128 May 4 01:34 help
drwxrwsr-x 11 root rvm 374 May 4 01:34 hooks
-rw-rw-r-- 1 root rvm 11 May 4 12:59 installed.at
drwxrwsr-x 4 root rvm 136 Jan 10 19:54 lib
drwxrwsr-x 5 root rvm 170 May 4 12:55 log
drwxrwsr-x 2 root rvm 68 Jan 10 19:52 man
drwxrwsr-x 9 root rvm 306 Jan 10 19:52 patches
drwxrwxr-x 4 ESL rvm 136 May 4 12:59 patchsets
drwxrwsr-x 4 root rvm 136 Jan 10 19:55 rubies
drwxrwsr-x 64 root rvm 2176 May 4 01:34 scripts
drwxrwsr-x 3 root rvm 102 May 4 01:34 src
drwxrwsr-x 2 root rvm 68 Jan 10 19:52 tmp
drwxrwsr-x 8 root rvm 272 May 4 12:59 user
drwxrwsr-x 4 root rvm 136 Jan 10 19:52 usr
drwxrwsr-x 5 root rvm 170 Jan 10 19:55 wrappers
Esto se debe a la forma en que instaló ruby.
Francamente, funciona * bien * si no te importa el sudo. Al final del día, es solo su computadora portátil ... No es un servidor que se ejecuta en un banco.
Si realmente te importa, chown gema carpetas según sea necesario.
Puede alojar gemas en su carpeta de inicio de usuario, que no necesita permisos de raíz:
bundle install --path ~/.gem
Para evitar pasar este parámetro manualmente, agregue export GEM_HOME=$HOME/.gem
a su .bash_profile
- esto resuelve el problema de sudo en Mac OS y otros sistemas * nix. También es posible que necesite tener acceso a las gemas que proporcionan ejecutables (como bundler), así que añada esto también:
PATH=$PATH:$HOME/.gem/bin
o en algunos casos:
PATH=$PATH:$HOME/.gem/ruby/<version>/bin
ref: https://.com/a/5862327/322020
UPD: Pero ten en cuenta que si comienzas a usar rbenv teniendo esta variable de entorno igual podría causar problemas al usar versiones muy diferentes de Ruby, por lo que es posible que desees unset GEM_HOME
temporalmente unset GEM_HOME
o unset GEM_HOME
una personalizada cada vez que ejecutes rbenv-ed Ruby .
Si está utilizando RVM, haga estos dos pasos y estará dorado
Asegúrese de que su usuario pertenece al grupo RVM
sudo usermod -a -G rvm myUserName
Asegúrese de que build_info se pueda escribir para todos los usuarios en el grupo RVM
sudo chmod 664 $GEM_HOME/build_info/*
Su directorio RVM gem debe ser propiedad del grupo rvm
. Por lo tanto, en lugar de cambiar la propiedad, sería aconsejable simplemente agregar al usuario al grupo rvm
:
# $(whoami) evaluates to your username
# You may want to change this to a different username depending on your config
# but $(whoami) is a passable default
usermod -a -G rvm $(whoami)
Tuve el mismo problema y descubrí que Bundler antes de instalar nuevas gemas comprueba si tiene permisos de escritura para todos los archivos encontrados $ GEM_HOME / build_info. En mi caso, no fue así, porque aunque el usuario que ejecutaba bundler estaba en el grupo de usuarios ''rvm'' y ese grupo poseía todos esos archivos, el grupo no pudo escribir algunos de ellos.
Eso sucedió porque instalé algunas de las gemas en la raíz, que tiene umask 0022 (todos los archivos creados por root, no pueden escribirse por grupo) en lugar de umask 0002 que otros tienen y que rvm espera.
Tuve esto hoy. Esta podría ser una situación única, pero copié un árbol fuente de Rails desde un sistema que tenía RVM instalado globalmente (en todo el sistema en /usr/local/rvm
), a un sistema que acababa de tener RVM instalado por usuario ( ~/.rvm
).
Intenté hacer la bundle install
y obtener el mensaje "Su cuenta de usuario no tiene permiso para instalar Rubygems del sistema". error. Después de mucho hurgar, noté que en mi directorio ~/.rvm
había un enlace simbólico:
~/.rvm/gems/ruby-2.1.1/cache -> /usr/local/rvm/gems/cache
Al eliminar ese enlace simbólico, la bundle install
volvió a funcionar sin sudo
.