`bundle install` не удалось из-за отказа в доступе

Я установил gem на мой новый сервер, и когда я пытаюсь выполнить bundle install, он не смог выполнить эту ошибку:

Unfortunately, a fatal error has occurred. Please see the Bundler troubleshooting documentation at http://bit.ly/bundler-issues. Thanks!
/usr/lib/ruby/1.9.1/fileutils.rb:247:in `mkdir': Permission denied - /var/lib/gems (Errno::EACCES)

Мой сервер - это Debian wheezy (7.1) с установленным пакетом ruby ​​1.9.3 по умолчанию. Я сконфигурировал /etc/gemrc следующим образом: gem: --user-install, чтобы пользователи могли локально устанавливать камни.

Драгоценный камень связки был установлен внутри моего gem dir ~/.gem, как я хочу, с помощью этой команды: gem install bundler (no sudo). Но bundler хочет установить драгоценные камни в /var/lib/gems вместо моего каталога драгоценных камней: (

Я не понимаю, что случилось с bundler... Почему он не пытается установить gem, где я хочу (в моем локальном каталоге gems)?

ps: в моем ноутбуке, с установленным пакетом archlinux и стандартным ruby ​​2.0.0, у меня нет проблем с установщиком для установки пользовательских камней.

Ответ 1

Я нашел!

Я обновил свой rubygem следующим образом gem update --system. Но только мои локальные драгоценные камни обновлялись из-за ограничения gem: --user-install в моем /etc/.gemrc. Когда связка работает, он использует глобальный рубигем, а не мой.

Чтобы устранить эту проблему, я обновил глобальные rubygems с помощью sudo gem update --system --no-user-install.

И все работает отлично!

Ответ 2

bundle install не использует настройки gemrc. (Хотя возможно, изменилось в недавнем обновлении, но обновление, похоже, загружает только ~/.gemrc, а не /etc/gemrc )

Вы можете делать то, что хотите, с помощью bundle install --path ~/.gem

Однако я бы очень рекомендовал работать с Rbenv или RVM. Вы сказали, что у вас был "тот же результат" с rbenv. Если ваши драгоценные камни пытались установить в /var/lib/gems, когда вы установили rbenv, тогда это была не рубиновая Rbenv, которая выполняла эту команду. Либо rbenv все еще использовал систему Ruby (которая будет, пока вы не установите Rbenv, установленный Ruby, чтобы стать стандартным), или у вас не было корректного запуска rbenv.