Как исправить "sudo bundle install" - PullRequest
       76

Как исправить "sudo bundle install"

0 голосов
/ 26 февраля 2020

Я прочитал много вопросов, таких как " Как я могу исправить случайное 'sudo bundle install dir_name'? ", " не удается восстановить из` sudo bundle install`"," `установка пакета` завершилась неудачно из-за отказа в разрешении", но ни один из них не сработал для меня.

В Debian 10.2 я запустил bundle install как root по ошибке. Я использовал Ctrl + c, чем через 1 секунду после его выдачи. Теперь, как обычный пользователь, каждый раз, когда я пытаюсь использовать bundle, я получаю:

bash: /srv/dev-disk-by-label-data/home/mark/gems/bin/bundle: Permission denied

Я делал:

  • gem uninstall bundler и gem install bundler
  • rm -r ~/.bundle/
  • rm -r ~/.gem/
  • bundle install --path ~/.gem и его вариантов
  • проверил, что все файлы в ~/gems принадлежат мне

Ошибка permission denied все еще существует.

1 Ответ

1 голос
/ 26 февраля 2020

Из документации Bundler:

По умолчанию Bundler устанавливает гемы в то же место, что и установка гемов.

В некоторых случаях это местоположение может быть недоступно для записи вашим Unix пользователь. В этом случае> Bundler разместит все во временном каталоге, а затем попросит вас ввести пароль> sudo для копирования драгоценных камней в их системное местоположение.

С вашей точки зрения, это идентично установке драгоценных камней непосредственно в> систему.

Вы никогда не должны использовать sudo bundle install. Это связано с тем, что в качестве текущего пользователя необходимо выполнить несколько других шагов в> установке пакета:

Обновление вашего Gemfile.lock

Обновление вашего поставщика / кэша, если необходимо

Проверка из частных git репозиториев, используя S SH ключи вашего пользователя

Из этих трех, первые два теоретически могут быть выполнены путем сгущения> результирующих файлов к $ SUDO_USER. Третье, однако, может быть выполнено только путем> вызова команды git в качестве текущего пользователя. Поэтому git гемов загружаются> и устанавливаются в ~ / .bundle, а не в $ GEM_HOME или $ BUNDLE_PATH.

В результате вы должны запустить bundle install как текущий пользователь, и Bundler> запросит Ваш пароль, если необходимо поместить драгоценные камни в их окончательное местоположение.

В качестве возможного решения вы можете полностью удалить Ruby и его зависимости, а затем установить Ruby, используя asdf, RVM или Запустите rbenv и снова запустите Bundler.

Я использую Bundler просто для установки гемов из гемфайла. cd в проект с гемфайлом и запустите bundle install. Он должен найти гем-файл и установить его автоматически. Я думаю, что плохо использовать Bundler внутри домашнего каталога.

У меня установлены все гемы:

~/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems
...