Установка gem или обновление 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.

кто-нибудь знает, как это решить?

23 ответов


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

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

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

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

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


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

gem install mygem --user-install

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

использование одного правильно предотвратит и может решить вашу проблему с разрешением при выполнении .

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

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

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

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

если вы обнаружите, что ваш каталог shims приходит после вашего системного каталога Ruby bin, то отредактируйте свой ~/.bashrc file и поместите это в качестве последней команды пути экспорта: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 см. следующий:


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

sudo gem update --system

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

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

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

rbenv global 2.0.0-p247
rbenv rehash

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


вам нужно исправить свои пути

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

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=""
  if [ "$#" -gt 0 ]; then
    shift
  fi

  case "$command" in
  rehash|shell)
    eval `rbenv "sh-$command" "$@"`;;
  *)
    command rbenv "$command" "$@";;
  esac
}
  1. скопируйте путь к своему профилю и сохраните его

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

  3. Run rbenv rehash

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

/Users/justin/.rbenv/shims/gem

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

существует два маршрута: используйте 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 " вместо: to установить rvm run:

rvm install 2.1.2
rvm use 2.1.2
gem update --system

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


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


если вы не беспокоитесь о конкретной версии ruby, вы можете пропустить heavy-lift ruby environment manager параметры и просто добавить эти строки ~/.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
  ...

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


Мне нужно сделать rbenv rehash таким образом, это будет указывать на мою местную библиотеку драгоценных камней.

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


нашел это как sudoменьше:

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

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

    gem: -n/usr/local/bin
    
  5. gem update --system


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

отсутствие правильного разрешения на запись для папки является распространенной проблемой, которую вы будете испытывать при установке пакетов Python, пакетов узлов и т. д.

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

использование виртуальной среды, такой как rbenv-отличная вещь, чтобы узнать, как это сделать, потому что это позволяет вам упаковать приложение и отправить его довольно легко. Я настоятельно рекомендую использовать виртуальную среду. Кроме того, если вы не владеете виртуальной средой, вы можете устанавливать пакеты снова и снова снова по всей вашей системе, которую вы могли бы просто установить глобально и использовать виртуально. Я не знаю о rbenv, но я часто делаю это с Virtualenv.


ПРАВДА

ответ chown и 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. каталог

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

breadly@breadly-desktop:~\Desktop

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

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

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

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


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

  1. Установить Homebrew:

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

    brew install ruby
    
  3. Установить Компас:

    sudo gem install compass
    

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

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

Работа для меня:

sudo gem uninstall cocoapods

sudo gem install cocoapods

как указал боббдельсол, рехаш работал на меня:

==> 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...

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

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

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

установить rbenv по brew install rbenv;

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

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


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


cd / библиотека / Рубин / драгоценные камни / 2.0.0

открыть .

щелкните правой кнопкой мыши get info

нажмите lock

место пароль

сделать все читать и писать.


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

sudo gem install cocoapods

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

$ sudo chown myuser /var/lib/gems


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

Если у вас уже есть root use enable на вашем mac в типе терминала

$ su

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

  1. в меню Apple выберите Системные настройки....
  2. в меню Вид выберите пользователи и группы.
  3. нажать на замок и войдите в систему как администратор счет.
  4. Нажмите Параметры Входа....
  5. Нажмите кнопку " Изменить..." или "присоединиться..." в правом нижнем углу.
  6. Нажмите кнопку " Open Directory Utility...".
  7. нажмите на блокировку в окне утилиты каталога.
  8. введите имя учетной записи администратора и пароль, затем нажмите кнопку ОК.
  9. в меню Правка выберите Включить пользователя Root.
  10. введите пароль root, который вы хотите использовать в полях пароль и проверка, затем нажмите ЛАДНО.

больше при этом на http://support.apple.com/kb/ht1528

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