Подтвердить что ты не робот

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
4b9b3361

Ответ 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/*