Не могу установить драгоценные камни на OS X «El Capitan»

182

Я не могу установить и запустить fakes3gem на El Capitan Beta 5.

Я попытался:

sudo gem install fakes3
ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/fakes3

Затем я попытался сделать это как кокосопод. Это работало для кокапод, но не для подделок3.

mkdir -p $HOME/Software/ruby
export GEM_HOME=$HOME/Software/ruby
gem install cocoapods
[...]
1 gem installed
gem install fakes3
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
Химаншу Ядав
источник
3
Не используйте sudoдля установки Ruby или изменения гемов. Вместо этого используйте rbenv или RVM для установки и управления Ruby. Прочитайте и следуйте инструкциям на соответствующих сайтах. И, в любом случае, после установки не используйте, sudoесли вы не понимаете, что меняется и почему вы хотите это сделать.
Жестянщик

Ответы:

333

Отказ от ответственности: @theTinMan и другие разработчики Ruby часто указывают, что их не следует использовать sudoпри установке гемов, и указывают на такие вещи, как RVM . Это абсолютно верно при разработке Ruby. Идите и используйте это.

Тем не менее, многие из нас просто хотят некоторые двоичный файл , который случается быть распределены как драгоценный камень (например fakes3, cocoapods, xcpretty...). Я определенно не хочу беспокоиться об управлении отдельным рубином. Вот ваши более быстрые варианты:

Вариант 1: продолжать использовать sudo

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

Проблема в том, что эти двоичные файлы установлены /usr/bin, что запрещено со времен El Capitan. Тем не менее, вы можете установить их /usr/local/binвместо. Вот где Homebrew устанавливает свои вещи, так что, вероятно, уже существует.

sudo gem install fakes3 -n/usr/local/bin

Gems будут установлены, /usr/local/binи каждый пользователь в вашей системе сможет использовать их, если они находятся в своем PATH .

Вариант 2: установить в свой домашний каталог (без sudo)

Следующее установит гемы ~/.gemи поместит двоичные файлы ~/bin(которые вы должны затем добавить в свой PATH).

gem install fakes3 --user-install -n~/bin

Сделайте это по умолчанию

В любом случае, вы можете добавить эти параметры в свой, ~/.gemrcтак что вам не нужно их запоминать:

gem: -n/usr/local/bin

т.е. echo "gem: -n/usr/local/bin" >> ~/.gemrc

или

gem: --user-install -n~/bin

т.е. echo "gem: --user-install -n~/bin" >> ~/.gemrc

( Совет: вы также можете отказаться --no-documentот создания документации для разработчиков Ruby.)

nschum
источник
Спасибо вам большое! Я боролся с новыми версиями brew и ruby, но так и не смог решить проблему / usr / bin. Указание нужного пути при запуске gem installрешило проблему.
Даниэль Саиди
.gemrcДолжен иметь gem: -n /usr/local/bin(нужен пробел после -n).
Пол Шрайбер
@PaulSchreiber Ну, я использую его без пробела уже пять месяцев. :) Ты уверен?
nschum
2
Плюс 1 для варианта № 2, который является жизнеспособной и безопасной альтернативой, если вам нужны только те двоичные файлы без отдельного Ruby. Наши домашние каталоги являются идеальным местом для добавления драгоценных камней, а быстрая настройка PATH делает их доступными. Я не могу порекомендовать вариант № 1, потому что кто- то в конечном итоге перезапишет гем и сломает свой системный Ruby или встроенный код Apple, который его использует, а затем они зададут еще один вопрос на SO о том, как это исправить.
Жестянщик
1
Это отличный ответ, но, возможно, устарел. На Сьерре мне понадобился вариант --install-dir / usr / local / bin
Райан Баллантайн
107

В моем случае мне пришлось переустановить Ruby с помощью Brew . Кажется, это решило проблему, так как я могу снова установить гемы.

brew install ruby

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

Франсиско Гонсалес Рулл
источник
Хорошо сработало для меня! Я полагаю, что это избавляет от каких-либо странностей в комплекте установки ruby ​​... IMO, это лучшее решение.
13
Вы можете сказать, какой ruby ​​запускается с `` `which -a ruby` `` На моей машине это дает: `` `$ which -a ruby ​​/ usr / local / bin / ruby ​​/ usr / local / bin / ruby ​​/ usr / bin / ruby ​​`` `Что касается того, почему / usr / local / bin дважды находится в PATH - похоже, brew install rubyпомещает его туда, даже если он уже там. Предположительно, ruby ​​в / usr / local сконфигурирован для установки своих драгоценных камней в месте, где не требуется root-доступ (что на самом деле имеет смысл).
WallStProg
7
PS Вы должны выйти из системы и войти обратно (через терминал), иначе gem installпроизойдет сбой.
WallStProg
Работал нормально для меня. Я совместил принятый ответ с этим. Спасибо вам обоим
youssman
1
Вам не нужно выходить из системы и входить снова. Просто запустите, rehashчтобы убедиться, что ваша оболочка понимает, что есть новая rubyверсия $PATH. Даже это не будет необходимо в ситуации, когда вы еще не запускались rubyв сеансе оболочки.
Радон Росборо
38

Это из-за новой функции безопасности OS X "El Capitan". Попробуйте добавить --user-installвместо использования sudo:

$ gem install *** --user-install

Например, если вы хотите установить fake3, просто используйте:

$ gem install fake3 --user-install
Шао Вэньбинь
источник
Да! Спасибо вам большое!
Луи Магнотти
Потратив 30 минут с подходом к варке, закрытием терминала и т. Д., Наконец, это решение сработало на 10.10.5, но все еще не уверен, почему подход к варке не сработал. Просьба уточнить.
Какую
1
Ух ты, теперь проблема вернулась. Gem install redcarpet -v '3.3.4' --user-install ошибка метания ПРЕДУПРЕЖДЕНИЕ: у вас нет /Users/user_name/.gem/ruby/2.0.0/bin в вашем PATH, gem исполняемые файлы не будут запускаться. Раньше я не получал эту ошибку
vikramvi
1
stackoverflow.com/questions/19579392/… , это помогло мне наконец решить проблему
vikramvi
25
sudo gem install -n /usr/local/bin cocoapods

Попробуй это. Это определенно будет работать.

Фемина Брамбхатт
источник
2
точно нет.
Мартен Хартман
19

Вы должны обновить Xcode до новейшего (v7.0.1), и все будет работать как обычно.

Если после того, как вы установили новейший Xcode и все еще не работаете, попробуйте установить gem следующим образом:

sudo gem install -n /usr/local/bin GEM_NAME_HERE

Например:

sudo gem install -n /usr/local/bin fakes3
sudo gem install -n /usr/local/bin compass
sudo gem install -n /usr/local/bin susy
astrasleepz
источник
10

Похоже, при обновлении до OS X El Capitain, каталог / usr / local изменяется несколькими способами:

  1. права пользователя сбрасываются (это также проблема для людей, использующих Homebrew)
  2. двоичные файлы и символические ссылки могли быть удалены или изменены

[Править] Есть также предварительная вещь, которую нужно сделать: обновить Xcode ...

Решение для № 1:

$ sudo chown -R $(whoami):admin /usr/local

Это исправит права доступа к /usr/localкаталогу, что поможет как gem installи brew install|link|...командам работать правильно.

Решение № 2:

Проблемы с Ruby

Убедитесь, что вы установили права доступа к /usr/localкаталогу (см. №1 выше)

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

sudo gem install <gemname>

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

Если вы не хотите сталкиваться с проблемами обратной совместимости, я предлагаю вам сначала определить, какую версию какого драгоценного камня вы хотите получить, а затем переустановить его с -v version. Смотрите пример ниже, чтобы убедиться, что система не получит новую версию capistrano.

$ gem list | grep capistrano
capistrano (3.4.0, 3.2.1, 2.14.2)
$ sudo gem install capistrano -v 3.4.0

Проблемы с пивоварением

Обновите варево и обновите свои формулы

$ brew update
$ brew upgrade

Вам также может понадобиться повторно связать некоторые из них вручную

$ brew link <formula>
Foobar
источник
3

Как уже было сказано, проблема связана с функцией безопасности Mac OSX со времен «El Capitan».

При использовании системы Ruby по умолчанию процесс установки происходит в /Library/Ruby/Gems/2.0.0каталоге, который недоступен пользователю, и выдает ошибку.

Вы можете посмотреть параметры среды Ruby с помощью команды

$ gem env

Существует ИНСТРУКЦИЯ ПО УСТАНОВКЕ и ИНСТРУКЦИЯ ПО УСТАНОВКЕ. Чтобы использовать каталог установки пользователя вместо каталога установки по умолчанию, вы можете использовать --user-installпараметр вместо использования, sudoчто никогда не рекомендуется.

$ gem install myGemName --user-install

В процессе не должно быть никаких проблем с правами. Затем драгоценные камни устанавливаются в пользовательский каталог:~/.gem/Ruby/2.0.0/bin

Но чтобы сделать установленные гемы доступными, этот каталог должен быть доступен по вашему пути. В соответствии с часто задаваемыми вопросами Ruby , вы можете добавить следующую строку в ваш ~/.bash_profileили~/.bashrc

if which ruby >/dev/null && which gem >/dev/null; then
    PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH"
fi

Затем закройте и перезагрузите терминал или перезагрузите ваш .bash_profileили .bashrc( . ~/.bash_profile)

emchateau
источник
2

Это решение, которое я использовал:

Примечание: это исправление для компаса, как я написал для другого SO вопроса, но я использовал один и тот же процесс для восстановления функциональности всех процессов терминала, очевидно, что устанавливаемые вами гемы разные, но процесс тот же.

Я была такая же проблема. Это связано с тем, что Apple внедрила защиту целостности системы (SIP). Вы должны сначала отключить это ...

Перезагрузка в режиме восстановления:

Перезагрузитесь и удерживайте Ctrl + R, пока не увидите логотип яблока.

После загрузки выберите Утилиты> Терминал в верхней панели.

тип: csrutil disable

затем введите: reboot

После перезагрузки

Откройте терминал обратно и введите команды:

sudo gem uninstall bundler

sudo gem install bundler

sudo gem install compass

sudo gem install sass

sudo gem update --system

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

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

sudo gem pristine ffi --version 1.9.3

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

Скриншот

jbalesteri
источник
2

Если гем, который вы пытаетесь установить, требует библиотек xml, попробуйте это:

sudo gem install -n /usr/local/bin  <gem_name> -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

В частности, я столкнулся с проблемой при установке nokogiri gem v 1.6.8 на OS X El Capitan.

и это наконец сработало для меня:

sudo gem install -n /usr/local/bin  nokogiri -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

Чтобы убедиться, что у вас установлены libxml2 и libxslt, вы можете сделать:

brew install libxml2 libxslt
brew install libiconv

и затем убедитесь, что у вас установлены инструменты командной строки xcode:

xcode-select --install 

должен вернуть эту ошибку:

xcode-select: error: command line tools are already installed, use "Software Update" to install updates
Анирбан Нанди "Радость"
источник
1

Переустановка RVM работала для меня, но мне пришлось переустанавливать все мои драгоценные камни впоследствии:

rvm implode
\curl -sSL https://get.rvm.io | bash -s stable --ruby
rvm reload
kkelleey
источник
0

Я столкнулся с той же проблемой после установки El Capitan, попытался установить sass и compass в проект Symfony, следующая команда вернула следующую ошибку:

$ sudo gem установить компас

ОШИБКА: Ошибка установки компаса: ОШИБКА: не удалось создать собственное расширение для gem.

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb 

проверка на ffi.h ... /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/mkmf.rb:434:in `try_do ': компилятору не удалось сгенерировать запускаемый файл. (Ошибка выполнения)

Затем я попытался установить sass с помощью: $ sudo gem install sass

Получил то же сообщение об ошибке, после некоторого поиска в Google мне удалось установить sass с помощью следующей команды:

$ sudo gem install -n / usr / local / bin sass

Вышеописанное помогло мне с установкой sass, но не сработало для установки компаса. Я читал, что кто-то где-то открыл экземпляр xcode, затем снова закрыл его, а затем успешно выполнил ту же команду, после которой работал для них. Я попытался открыть xcode, но получил сообщение о том, что установленная версия xcode не совместима с El Capitan. Затем я обновил xcode из магазина приложений и повторно выполнил следующую команду, которая в этот раз была выполнена успешно:

$ sudo gem install -n / usr / local / bin compass

Затем я смог запустить $ compass init

Теперь у меня есть все мои драгоценные камни, и я могу приступить к созданию прекрасных нахальных вещей :)

Барри Пур
источник
0

Я должен был rm -rf ./vendorтогда бежать bundle installснова.

VoA
источник
-1

Я не люблю устанавливать вещи с помощью sudo. как только вы начинаете с sudo, вы не можете остановиться ..

попробуйте дать разрешения для каталога Gems.

sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0
alonn24
источник
2
Не меняйте владельца системы Ruby Gems. Это может вызвать проблемы, когда Mac OS пытается что-либо обновить.
Жестянщик
-1
sudo chown -R $(whoami):admin /usr/local

Это даст разрешения обратно (Homebrew устанавливает там ruby)

Mirror318
источник
2
Если вы запустите эту команду, и она испортит права доступа к вашим данным MySQL, вам потребуется вернуть их обратно. Вот как. stillatmylinux.com/not-every-linux-command-is-good-for-you
stillatmylinux