Bundler не может установить никаких драгоценных камней без sudo
Я пытаюсь установить приложение rails, и каждый раз, когда я использую bundle
, он терпит неудачу без sudo
. Моя нынешняя ситуация заключается в том, что все работает до тех пор, пока используется sudo
для всего, включая рельсы. Я не думаю, что это правильно.
Например:
$ 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.
Но тогда я делаю то, что он говорит, и он работает:
$ 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
Эта картина повторяется снова и снова для разных драгоценных камней. Я не понимаю. Почему это происходит? Если я использую sudo
, пакет будет обновляться без этой ошибки. Но текущая ситуация в том, что мне нужно sudo
для всего, включая rake...
или rails server
и т.д. Что-то не так.
Дополнительная информация: я на 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
Обновление
Может быть информативным, что я могу запустить sudo bundle install
без ошибок. Затем сразу же после bundle install
выходит ошибка с ошибкой, как вы видите выше. Почему это?
Update2
/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
Ответы
Ответ 1
Вы можете размещать драгоценные камни в домашней папке пользователя, которая не требует прав root:
bundle install --path ~/.gem
Чтобы избежать передачи этого параметра вручную, добавьте export GEM_HOME=$HOME/.gem
в .bash_profile
- это решает проблему sudo в Mac OS и других системах * nix. Вам также может потребоваться доступ к драгоценным камням, которые предоставляют исполняемые файлы (например, bundler), поэтому добавьте это тоже:
PATH=$PATH:$HOME/.gem/bin
или в некоторых случаях:
PATH=$PATH:$HOME/.gem/ruby/<version>/bin
ref: fooobar.com/questions/194317/...
UPD: Но имейте в виду, что если вы начнете использовать rbenv, имея эту переменную окружения, то это может вызвать проблемы при использовании слишком разных версий Ruby, поэтому вы можете захотеть использовать временный unset GEM_HOME
или добавлять к ним каждый раз при запуске rbenv-ed Ruby.
Ответ 2
Ваш каталог RVM gem должен принадлежать группе rvm
. Таким образом, вместо изменения права собственности было бы разумно просто добавить пользователя в группу 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)
Ответ 3
Это связано с тем, как вы установили ruby.
Честно говоря, он работает * просто отлично *, если вы не против sudo. В конце концов, это просто ваш ноутбук... Не какой-то сервер работает в банке.
Если вы действительно заботитесь, приложите палочки для драгоценных камней по мере необходимости.
Ответ 4
У меня это случилось сегодня. Это может быть уникальной ситуацией, но я скопировал исходное дерево Rails из системы, в которой RVM установлен глобально (общесистемный в /usr/local/rvm
), системе, которая только что установила RVM для каждого пользователя (~/.rvm
).
Я пытался сделать bundle install
и получить "Учетная запись пользователя не разрешена для установки в систему Rubygems". ошибка. После многого выкалывания я заметил, что в моем каталоге ~/.rvm
появилась символическая ссылка:
~/.rvm/gems/ruby-2.1.1/cache -> /usr/local/rvm/gems/cache
Удаление этой символической ссылки получило bundle install
снова работу без sudo
.
Ответ 5
У меня была такая же проблема и выяснилось, что Bundler перед установкой новых драгоценных камней проверяет, имеет ли разрешение на запись для всех найденных файлов $GEM_HOME/build_info. В моем случае это не так, потому что, хотя пользователь, который запускает bundler, находился в группе пользователей "rvm", и эта группа владела всеми этими файлами, группе не разрешалось писать некоторые из них.
Это произошло потому, что я установил некоторые из самоцветов под root, у которых umask 0022 (все файлы, созданные root, не могут быть записаны группой) вместо umask 0002, которые есть у других, и которые ожидает rvm.
Ответ 6
Если вы используете RVM, выполните следующие два действия, и вы будете золотыми
-
Убедитесь, что ваш пользователь принадлежит группе RVM
sudo usermod -a -G rvm myUserName
-
Убедитесь, что файл build_info доступен для записи для всех пользователей в группе RVM
sudo chmod 664 $GEM_HOME/build_info/*