Как установить гем или обновить RubyGems, если он не работает с ошибкой прав доступа

Я пытаюсь установить гем, используя gem install mygem, или обновить RubyGems, используя gem update --system, и он не работает с этой ошибкой:

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

У кого-нибудь есть идеи, как решить эту проблему?

Ответ 1

У вас нет прав на запись в каталог /Library/Ruby/Gems/ 1.8.

означает, что у вас нет разрешения на запись там.

Это версия Ruby, установленная Apple, для собственного использования. Хотя это нормально, чтобы внести незначительные изменения в это, если вы знаете, что делаете, потому что вы не уверены в проблеме с разрешениями, я бы сказал, что не рекомендуется продолжать этот путь.

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

Между двумя, я использую rbenv, хотя я использовал RVM много в прошлом. rbenv использует более "ручной" подход к управлению вашей установкой Ruby. RVM обладает множеством функций и очень мощным, но, как результат, более навязчивым. В любом случае, прочитайте инструкцию по установке для них пару раз, прежде чем приступать к установке в зависимости от того, что вы выбрали.

Ответ 2

Попробуйте добавить --user-install вместо использования sudo:

gem install mygem --user-install

Ответ 3

Вам действительно нужно использовать менеджер версий Ruby.

Использование одного из них должным образом предотвратит и может разрешить вашу проблему разрешения при выполнении команды gem update.

Я рекомендую rbenv.

Однако, даже если вы используете менеджер версий Ruby, вы все равно можете получить такое же сообщение об ошибке.

Если вы это сделаете, и вы используете rbenv, просто убедитесь, что каталог ~/.rbenv/shims находится перед пути к системе Ruby.

$ echo $PATH покажет вам порядок вашего пути загрузки.

Если вы обнаружите, что ваш каталог прокладок поступает после вашего каталога Ruby bin, а затем отредактируйте свой файл ~/.bashrc и поместите его в качестве последней команды экспорта PATH: export PATH=$HOME/.rbenv/shims:$PATH

$ ruby -v показывает вам, какую версию Ruby вы используете

Это показывает, что я в настоящее время использую системную версию Ruby (обычно не хорошо)

$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]

$ rbenv global 1.9.3-p448 переключает меня на более новую, предварительно установленную версию (см. ссылки ниже).

Это показывает, что я использую более новую версию Ruby (что, вероятно, не вызовет Gem:: FilePermissionError)

$ ruby -v
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

Обычно вам не нужно вводить команду gem с sudo. Если вы чувствуете необходимость сделать это, что-то, вероятно, неправильно сконфигурировано.

Подробнее о rbenv см. ниже:

Ответ 4

Почему бы вам не сделать:

sudo gem update --system

Ответ 5

Для меня проблема заключалась в использовании rbenv и забывании установить правильную версию по всему миру.

Поэтому мне пришлось установить его с помощью rbenv global xxx

В моем случае я установил 2.0.0-p247, поэтому мне пришлось выполнить команду:

rbenv global 2.0.0-p247
rbenv rehash

Тогда все работало нормально.

Ответ 6

Это решит проблему с MacOs Mojave в чистом виде:

brew install ruby

Затем установите GEM_HOME в свой каталог пользователя. На терминале:

Bash:

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME=$HOME/gems' >> ~/.bashrc
echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

ИЛИ если на Zsh:

echo '# Install Ruby Gems to ~/gems' >> ~/.zshrc
echo 'export GEM_HOME=$HOME/gems' >> ~/.zshrc
echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.zshrc
source ~/.zshrc

Ответ 7

Вы должны исправить свои пути.

Чтобы определить, будет ли работать это исправление, выполните следующее:

which gem

Это должно вывести каталог, к которому у вас нет прав доступа:

/usr/bin/gem

Чтобы это исправить, выполните следующие действия:

  1. Определите путь, который необходимо скопировать в свой профиль:

    rbenv init -
    

    Первая строка вывода - это строка, которую необходимо скопировать в свой профиль:

    export PATH="/Users/justin/.rbenv/shims:${PATH}" #path that needs to be copied
    source "/usr/local/Cellar/rbenv/0.4.0/libexec/../completions/rbenv.zsh"
    rbenv rehash 2>/dev/null
    rbenv() {
      typeset command
      command="$1"
      if [ "$#" -gt 0 ]; then
        shift
      fi
    
      case "$command" in
      rehash|shell)
        eval 'rbenv "sh-$command" "[email protected]"';;
      *)
        command rbenv "$command" "[email protected]";;
      esac
    }
    
  2. Скопируйте путь к своему профилю и сохраните его.

  3. Перезагрузите свой профиль (source ~/.zshenv для меня).

  4. Запустите rbenv rehash.

Теперь, когда вы запустите which gem, вы должны получить локальный путь, к которому у вас есть разрешения:

/Users/justin/.rbenv/shims/gem

Ответ 8

sudo gem update --system
sudo gem install (gemfile)

Ответ 9

Это сработало для меня. Кроме того, если вы установили камни как root раньше, он исправляет эту проблему, изменяя право собственности на вас (лучше по соображениям безопасности).

sudo chown -R `whoami` /Library/Ruby/Gems

Ответ 10

Существует два маршрута: используйте rbenv или RVM. Есть рецепты для обоих ниже. Прежде чем вы это сделаете, вы, вероятно, захотите отключить установку локальных документов для драгоценных камней.

echo "gem: --no-ri --no-rdoc" >> ~/.gemrc

Тогда:

install rbenv

install ruby-build

run:

rbenv install 2.1.2 (or whatever version you prefer)
rbenv global 2.1.2
gem update --system

Это устанавливает обновленную версию системы gem в ваших локальных каталогах. Это означает, что вы не вмешиваетесь в конфигурацию системы. Если вы задаете этот вопрос, вам не следует возиться с системной безопасностью, и вы потратите больше времени на понимание проблем, с которыми вы можете столкнуться, чем просто простой способ избежать проблемы, с которой вы начали. Изучите InfoSec позже, когда вы знаете больше о операционной системе и программировании.

Для альтернативного использования вместо RVM: установить rvm run:

rvm install 2.1.2
rvm use 2.1.2
gem update --system

Это имеет тот же результат, в итоге вы получаете локальную систему Ruby и Gem, которая не мешает системным версиям. Нет необходимости в самообслуживании Homebrew или перегруженных системных библиотеках и т.д.

Ответ 11

Я нашел это руководство для sudo меньше драгоценного камня:

  • brew install rbenv ruby-build
  • sudo gem update --system
  • добавить экспорт в .bashrc:

    export RBENV_ROOT="$(brew --prefix rbenv)"
    export GEM_HOME="$(brew --prefix)/opt/gems"
    export GEM_PATH="$(brew --prefix)/opt/gems"
    
  • И, наконец, добавьте это в свой ~/.gemrc:

    gem: -n/usr/local/bin
    
  • gem update --system

Ответ 12

Попробуйте ответить nathanwhy, прежде чем использовать мой оригинальный ответ ниже. Его рекомендация --user-install должна выполнить ту же цель без необходимости гадать с вашим .bash_profile или определить вашу рубиновую версию.


Если вас не интересует конкретная рубиновая версия, вы можете пропустить параметры диспетчера среды рубинов с тяжелым подъемом и просто добавить эти строки в ~/.bash_profile:

export GEM_HOME="$HOME/.gem/ruby/2.0.0"
export GEM_PATH="$HOME/.gem/ruby/2.0.0"

Путь украден с исходного вывода gem env:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.14
  - RUBY VERSION: 2.0.0
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.0.0
  - RUBY EXECUTABLE: /System/Library/.../2.0/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-14
  - GEM PATHS:
     - /Library/Ruby/Gems/2.0.0
     - /Users/mylogin/.gem/ruby/2.0.0 # <-- This guy, right here.
     - /System/Library/.../usr/lib/ruby/gems/2.0.0
  ...

Нет sudo требуется, и вы можете использовать уже установленный рубин, любезно предоставленный Apple.

Ответ 13

Мне нужно было сделать rbenv rehash, чтобы он указывал на мою локальную библиотеку Gem.

Похоже, что у вас есть менеджер gem, указывающий на Системную библиотеку, поэтому вместо того, чтобы возиться с разрешениями, сделайте эквивалент "rehash" для вашего менеджера, чтобы заставить вещи указывать локально.

Ответ 14

Старше и мудрее

Не делай то, что я здесь говорю, просто знай, что будь осторожен всякий раз, когда ты используешь sudo. Вы, вероятно, хотите использовать что-то вроде rbenv чтобы изолировать любую работу, которую вы делаете.


далеко

узнать о chown

Я не знаю, нравится ли вам командная строка, но это сделает работу над любым проектом с любым инструментом, устанавливающим пакеты в вашу систему, быстрым.

chown насколько я могу судить, выступает за смену владельца.

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

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /var/lib/gems/1.9.1 directory.

Это прекрасная возможность использовать chown. Вы видите, что Ruby предоставил нам каталог, к которому ему нужен доступ, и похоже, что он будет использоваться довольно часто.

В этом случае есть только три вещи, которые нужно знать, чтобы решить проблему, но chown гораздо более мощный и дает вам гораздо большую гибкость, чем я продемонстрирую сейчас. Пожалуйста, обратитесь к источнику в нижней части для получения дополнительной информации.

Две вещи

  1. имя пользователя
  2. каталог

Если вы находитесь в оболочке, найти имя пользователя легко. Просто посмотрите на подсказку. Моя выглядит так:

[email protected]:~\Desktop

Текущий пользователь - это просто имя перед @. Мы знаем каталог из сообщений об ошибках, но у вас есть два варианта. Вы можете ограничить свое разрешение текущей версией, используя ../gems/1.9.1, или дать себе разрешение на запись для гемов всех версий, используя ../gems.

Команда для фактического изменения владельца будет выглядеть следующим образом.

chown -R $(whoami) /absolute/path/to/directory

-R известен как флаг, а флаг -R обычно говорит команде сделать что-то рекурсивно, или, другими словами, выполнить команду для каждой вещи, которая содержится в каталоге, и всех вещей, содержащихся в каталогах, содержащихся внутри, и так до тех пор, пока больше ничего не будет.

Ответ 15

Я отформатировал свой Mac, и многие предлагаемые решения не сработали для меня. Для меня это были команды в правильном порядке:

  • Установите Homebrew:

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
  • Установите Ruby:

    brew install ruby
    
  • Установить компас:

    sudo gem install compass
    

Ответ 16

sudo chown -R $USER/Library/Ruby/Gems/

Ответ 17

Работайте со мной:

sudo gem uninstall cocoapods

sudo gem install cocoapods

Ответ 18

Проверьте правильность вашей версии Ruby. Если нет, измените его.

Это работает для меня:

$ rbenv global 1.9.3-p547
$ gem update --system

Ответ 19

Установить rbenv с помощью brew install rbenv;

Затем поместите eval "$(rbenv init -)" в конец ~/.bash_profile (или ~/.zshrc в MacOS);

Откройте новый терминал и запустите gem install *** будет работать!

Ответ 20

Как указывал bobbdelsol, перефразирование работало для меня:

==> which ruby
/usr/bin/ruby

==> rbenv install 1.9.3-p551
Downloading ruby-1.9.3-p551.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p551.tar.bz2
Installing ruby-1.9.3-p551...
Installed ruby-1.9.3-p551 to /Users/username/.rbenv/versions/1.9.3-p551


==> which ruby
/Users/username/.rbenv/shims/ruby

==> which gem
/Users/username/.rbenv/shims/gem

==> gem install compass
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.


==> ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]


==> rbenv global 1.9.3-p551


==> ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]


==> rbenv global 1.9.3-p551


==> rbenv rehash


==> ruby -v
ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-darwin15.4.0]


==> gem install compass
Fetching: sass-3.4.22.gem (100%)
Fetching: multi_json-1.11.3.gem (100%)
Fetching: compass-core-1.0.3.gem (100%)
Fetching: compass-import-once-1.0.5.gem (100%)
Fetching: chunky_png-1.3.5.gem (100%)
Fetching: rb-fsevent-0.9.7.gem (100%)
Fetching: ffi-1.9.10.gem (100%)
Building native extensions.  This could take a while...
Fetching: rb-inotify-0.9.7.gem (100%)
Fetching: compass-1.0.3.gem (100%)
    Compass is charityware. If you love it, please donate on our behalf at http://umdf.org/compass Thanks!
Successfully installed sass-3.4.22
Successfully installed multi_json-1.11.3
Successfully installed compass-core-1.0.3
Successfully installed compass-import-once-1.0.5
Successfully installed chunky_png-1.3.5
Successfully installed rb-fsevent-0.9.7
Successfully installed ffi-1.9.10
Successfully installed rb-inotify-0.9.7
Successfully installed compass-1.0.3
9 gems installed
Installing ri documentation for sass-3.4.22...
Installing ri documentation for multi_json-1.11.3...
Installing ri documentation for compass-core-1.0.3...
Installing ri documentation for compass-import-once-1.0.5...
Installing ri documentation for chunky_png-1.3.5...
Installing ri documentation for rb-fsevent-0.9.7...
Installing ri documentation for ffi-1.9.10...
Installing ri documentation for rb-inotify-0.9.7...
Installing ri documentation for compass-1.0.3...
Installing RDoc documentation for sass-3.4.22...
Installing RDoc documentation for multi_json-1.11.3...
Installing RDoc documentation for compass-core-1.0.3...
Installing RDoc documentation for compass-import-once-1.0.5...
Installing RDoc documentation for chunky_png-1.3.5...
Installing RDoc documentation for rb-fsevent-0.9.7...
Installing RDoc documentation for ffi-1.9.10...
Installing RDoc documentation for rb-inotify-0.9.7...
Installing RDoc documentation for compass-1.0.3...

Ответ 21

Протестировано на MacOS Mojave С УСПЕХОМ:

  1. Удалите все ваши старые версии ruby (допустим, у вас есть 2.00 и 2.3.0):

    $ rvm uninstall 2.0.0

    $ rvm uninstall 2.3.0

  2. Установите новую версию ruby:

    $ brew install ruby

  3. Установите псевдоним по умолчанию для вашей версии:

    $ rvm alias create default ruby

  4. Перезагрузите систему, потому что это самый безопасный способ, которым ваш компьютер загружает новую версию ruby, недавно установленную.

После того как вы выполнили описанную выше процедуру, вы можете успешно выполнить любую команду gem.

Ответ 22

cd/Library/Ruby/Gems/2.0.0

открыть.

щелкните правой кнопкой мыши получить информацию

блокировка кликов

разместить пароль

сделать все прочитанным и писать.

Ответ 23

Это сработало для меня.

Обновление sudo gem

sudo chown -R $USER/Library/Ruby/Gems/

Ответ 24

дать пользователю $ whoami для создания чего-нибудь в этой папке

sudo chown -R user /Library/Ruby/Gems/2.0.0

Ответ 25

Вы можете использовать: gem install cocoapods --pre --user

Ответ 26

Установка gem или обновление RubyGems завершается с ошибкой разрешения Затем введите эту команду

sudo gem install cocoapods

Ответ 27

Я использовал это и работал.

$ sudo chown myuser /var/lib/gems

Ответ 28

Причиной ошибки является то, что вы не вошли в систему как пользователь root на терминале.

Если у вас уже есть привилегия использования root на вашем mac в терминальном типе

$ su

Если у вас нет пользователя root, вам необходимо включить его, выполнив следующие шаги.

  • В меню Apple выберите "Системные настройки".
  • В меню "Вид" выберите "Пользователи и группы".
  • Нажмите блокировку и авторизуйтесь как учетную запись администратора.
  • Нажмите "Параметры входа"....
  • Нажмите кнопку "Изменить..." или "Присоединиться..." в правом нижнем углу.
  • Нажмите кнопку "Open Directory Utility...".
  • Щелкните блокировку в окне "Утилита каталога".
  • Введите имя учетной записи администратора и пароль, затем нажмите "ОК".
  • Выберите "Включить корневого пользователя" в меню "Правка".
  • Введите пароль root, который вы хотите использовать как в поля "Пароль", так и "Проверить", затем нажмите "ОК".

Еще раз на http://support.apple.com/kb/ht1528

По крайней мере, он работает для меня после того, как застрял пару часов.