Неможливо встановити дорогоцінні камені в OS X "El Capitan"


182

Я не в змозі встановити і запустити fakes3дорогоцінний камінь на 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, ймовірно, добре, якщо ви хочете, щоб ці інструменти були встановлені в усьому світі.

Проблема полягає в тому, що ці двійкові файли встановлюються в /usr/bin, що є поза межами з часу El Capitan. Однак ви можете встановити їх /usr/local/binзамість цього. Ось де Homebrew встановлює свої речі, тому він, мабуть , вже існує.

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

Доступні дорогоцінні камені будуть встановлені у /usr/local/binкожен користувач у вашій системі, може використовувати їх, якщо він знаходиться у своїй PATH .

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

Далі буде встановлено дорогоцінні камені ~/.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.)


Дуже дякую! Я боровся з новими версіями варіння та рубіну, але все ще не міг пройти проблему / usr / bin. Визначення потрібного шляху при запуску gem installвирішило проблему.
Даніель Саїді

.gemrcПовинен мати gem: -n /usr/local/bin(потрібен пробіл після -n).
Пол Шрайбер

@PaulSchreiber Ну, я використовую його без місця вже п’ять місяців. :) Ти впевнений?
nschum

2
Плюс 1 для Варіанту №2, який є життєздатною і безпечною альтернативою, якщо Ви хочете лише ті файли без окремого Ruby. Наші домашні каталоги є ідеальним місцем для додавання дорогоцінних каменів, і швидке підключення до PATH робить їх доступними. Я не можу рекомендувати Варіант №1, оскільки хтось в кінцевому підсумку перезаписать дорогоцінний камінь і зламає вбудований код системи Ruby або Apple, який використовує його, і тоді вони зададуть ще одне запитання про те, як це виправити.
Олов'яний чоловік

1
Це відмінна відповідь, але, можливо, застаріла. На Сьєррі потрібний мені варіант --install-dir / usr / local / bin
Ryan Ballantyne

107

У моєму випадку мені довелося перевстановити Ruby за допомогою Brew . Здається, це вирішило проблему, оскільки я можу знову встановити дорогоцінні камені.

brew install ruby

Після цього вам потрібно вийти з системи та увійти назад, або графічно, або просто перезапустити термінал.


Добре працював для мене! Я припускаю, що це позбудеться будь-яких дивацтв у комплекті комплекту рубіну ... ІМО, це найкраще рішення.
n13

Ви можете вказати, який рубін працює з `` який-рубін '' `` На моїй машині, яка дає: `` `$ that -a ruby ​​/ usr / local / bin / ruby ​​/ usr / local / bin / ruby ​​/ usr / bin / ruby brew install ruby. Імовірно, рубін в / usr / local налаштований для встановлення своїх самоцвітів у місці, яке не потребує кореневого доступу (що має ідеальний сенс насправді).
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 Але все ще не впевнений, чому підхід варити не працював. Поясніть будь ласка. котрий ruby ​​post brew install / usr / bin / ruby
vikramvi

1
Нічого собі, проблема повертається у встановленому камені redcarpet -v '3.3.4' - помилка кидання користувачем-ПОПЕРЕДЖЕННЯ: у вашому PATH, gem, немає /Users/user_name/.gem/ruby/2.0.0/bin виконувані файли не працюватимуть. Раніше я не отримував цієї помилки
vikramvi

1
stackoverflow.com/questions/19579392/… , це допомогло мені врешті вирішити проблему
vikramvi


19

Ви повинні оновити Xcode до найновішого (v7.0.1), і все буде працювати як нормально.

Якщо після встановлення найновішого Xcode і досі не працює, спробуйте встановити дорогоцінний камінь таким чином:

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

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>

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)


2

Це рішення, яке я використав:

Примітка: це виправлення стосується компаса, як я писав його на іншому запитанні SO, але я використовував той самий процес для відновлення функціональності всіх термінальних процесів, очевидно, що дорогоцінні камені, які ви встановлюєте, різні, але процес той самий.

У мене було те саме питання. Це пов'язано з тим, що Apple впроваджує захист системної цілісності (SIP). Спочатку ви повинні відключити це ...

Перезавантажте в режимі відновлення:

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

Після завантаження виберіть Utilities> Terminal у верхній смузі.

тип: 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 хвилин, щоб виправити це, але у вас будуть термінальні команди для роботи компаса.

Знімок екрана


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

0

Я зіткнувся з тією ж проблемою після встановлення El Capitan, я спробував встановити sass and 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:234:in `try_do ': компілятор не зміг створити виконуваний файл. (Помилка під час виконання)

Тоді я спробував встановити sass за допомогою: $ sudo gem install sass

Отримав те саме повідомлення про помилку, після деякого googling мені вдалося встановити 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знову.


-1

Мені не подобається встановлювати речі з судо. як тільки ви почнете з судо, ви не можете зупинитися ..

спробуйте дати дозволи в каталозі Gems.

sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0

2
Не змінюйте право власності на систему Ruby gems. Це може спричинити проблеми, коли Mac OS намагається оновити що-небудь.
Олов'яний чоловік

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.