OS X「El Capitan」に宝石をインストールできません


182

fakes3El Capitan Beta 5にgem をインストールして実行できません。

私は試した:

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
sudoRubyのインストールやgemの変更には使用しないでください。代わりに、rbenvまたはRVMを使用してRubyをインストールおよび管理します。それぞれのサイトの指示を読み、それに従ってください。また、どちらの場合も、インストール後、sudo何が変更され、なぜ変更するのかを理解しない限り、使用しないでください。
ティンマン

回答:


333

免責事項: @theTinManおよび他のRuby開発者はsudo、gemのインストール時に使用しないことを指摘し、RVMなどを指摘します。Ruby開発を行う場合、それは完全に真実です。さあ、それを使ってください。

しかし、私たちの多くはちょうど起こるいくつかのバイナリが宝石として配布することにしたい(例えばfakes3cocoapodsxcpretty...)。個別のルビの管理に煩わされたくはありません。ここにあなたのより速いオプションがあります:

オプション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なし)

次の例では、gemsをインストールして~/.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開発者用ドキュメントの生成をスキップすることもできます。)


どうもありがとうございます!私はbrewとrubyの新しいバージョンと格闘しましたが、それでも/ usr / bin問題を解決できませんでした。実行時に目的のパスを指定するとgem install、問題が解決しました。
Daniel Saidi

.gemrc持っていなければならないgem: -n /usr/local/bin(-nの後にスペースが必要)。
Paul Schreiber 2016年

@PaulSchreiberええと、私はスペースなしで5か月間使用しています。:) 本気ですか?
nschum

2
オプション#2のプラス1。これは、個別のRubyなしでそれらのバイナリのみが必要な場合に実行可能で安全な代替手段です。私たちのホームディレクトリは、追加されたgemに最適な場所です。PATHをすばやく調整すると、それらにアクセスできるようになります。オプション#1はお勧めできません。誰かが宝石を上書きし、システムを破壊するためです。RubyまたはAppleの組み込みコードを使用しているため、それを修正する方法についてSOでさらに別の質問をします。
ティンマン

1
これは素晴らしい答えですが、おそらく時代遅れです。シエラで必要なオプションは--install-dir / usr / local / binでした
Ryan Ballantyne

107

私の場合、Brewを使用してRubyを再インストールする必要がありました。宝石を再インストールできるので、問題は解決したようです。

brew install ruby

この後、グラフィカルに、または単に端末を再起動するだけで、ログアウトして再度ログインする必要があります。


うまくいきました!バンドルされたルビのインストールで奇妙さが取り除かれていると思います... IMOこれが最良の解決策です。
n13

`` `which -a ruby​​` ``を実行すると、どのルビーが実行されているかを確認できます。 usr / bin / ruby​​ `` `なぜ/ usr / local / binがPATHに2回あるのか- brew install rubyすでにそこにある場合でも、そこに置くように見えます。おそらく、/ usr / local内のルビは、ルートアクセスを必要としない場所にgemをインストールするように構成されています(実際には完全に意味があります)。
WallStProg 2016

7
PSログアウトして(ターミナル経由で)再度ログインする必要がありますgem install。そうしないと失敗します。
WallStProg 2016

私にとってはうまくいきました。私はこれと受け入れられた答えを組み合わせました。両方ありがとう
youssman

1
ログアウトして再度ログインする必要はありません。実行rehashして、ruby以前に新しいものがにあることをシェルが認識していることを確認してください$PATH。これはruby、シェルセッションでまだ実行していない状況では必要ありません。
Radon Rosborough、2017年

38

OS Xの新しいセキュリティ機能「エルキャピタン」によるものです。--user-installsudoを使用する代わりに追加してみてください:

$ gem install *** --user-install

たとえば、fake3をインストールする場合は、次のコマンドを使用します。

$ gem install fake3 --user-install

はい!どうもありがとうございます!
Louis Magnotti 2016

醸造アプローチ、ターミナルの閉鎖などで30分を費やした後、このソリューションは10.10.5で機能しましたが、醸造アプローチが機能しなかった理由はまだわかりません。どうか明らかにしてください。どのruby post brew install / usr / bin / ruby
vikramvi

1
うわー今問題はバックgemをインストールするredcarpet -v '3.3.4' --user-install throwing error警告:/Users/user_name/.gem/ruby/2.0.0/binがPATH、gemにありません実行可能ファイルは実行されません。以前はこのエラーは発生していませんでした
vikramvi

1
stackoverflow.com/questions/19579392/…、これはようやく問題を解決するのに役立ちました
vikramvi


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

10

OS X El Capitainにアップグレードすると、/ usr / localディレクトリが複数の方法で変更されます。

  1. ユーザー権限がリセットされます(これはHomebrewを使用しているユーザーにとっても問題です)
  2. バイナリとシンボリックリンクが削除または変更された可能性があります

[編集]やるべきこともあります。Xcodeのアップグレード...

#1のソリューション:

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

これにより、/usr/localディレクトリの権限が修正され、コマンドgem installbrew install|link|...コマンドの両方が正しく機能するようになります。

#2の解決策:

Rubyベースの問題

の権限を修正したことを確認してください /usr/localディレクトリ(上記の#1を参照)

まず、以下を使用してgemを再インストールしてみてください:

sudo gem install <gemname>

指定されたgemの最新バージョンをインストールすることに注意してください。

下位互換性の問題に直面したくない場合は、最初にどのgemのどのバージョンを取得するかを決定し、次にで再インストールすることをお勧めします-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のセキュリティ機能から来ています。

デフォルトのシステムRubyを使用すると、インストールプロセス/Library/Ruby/Gems/2.0.0はユーザーが利用できないディレクトリで行われ、エラーが発生します。

次のコマンドでRuby環境のパラメーターを確認できます

$ gem env

INSTALLATION DIRECTORYとUSER INSTALLATION DIRECTORYがあります。デフォルトのインストールディレクトリの代わりにユーザーインストールディレクトリを使用するには、代わりに--user-installパラメータを使用できますsudo

$ gem install myGemName --user-install

その過程で権利の問題はもうないはずです。その後、gemsはユーザーディレクトリにインストールされます。~/.gem/Ruby/2.0.0/bin

ただし、インストールされたgemを使用できるようにするには、このディレクトリをパスで使用できるようにする必要があります。Rubyのfaqによると、次の行を~/.bash_profileorに追加できます~/.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の質問で書いたようにコンパス用ですが、機能をすべてのターミナルプロセスに復元するために同じプロセスを使用しました。インストールしているgemは明らかに異なりますが、プロセスは同じです。

同じ問題がありました。これはAppleがSystem Integrity Protection(SIP)を実装しているためです。最初にそれを無効にする必要があります...

リカバリモードで再起動します。

再起動し、リンゴのロゴが表示されるまでCommand + 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分で修正できますが、コンパスを機能させるための端末コマンドがあります。

スクリーンショット


2

インストールしようとしているgemにxmlライブラリーが必要な場合は、以下を試してください。

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

特に、OS X El Capitanにnokogiri gem v 1.6.8をインストールしているときに問題が発生しました

そしてこれは最終的に私のために働きました:

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の再インストールはうまくいきましたが、後ですべてのgemを再インストールする必要がありました。

rvm implode
\curl -sSL https://get.rvm.io | bash -s stable --ruby
rvm reload

0

El Capitanをインストールした後で同じ問題に遭遇しました、sassとcompassをsymfonyプロジェクトにインストールしようとしました、次のコマンドは次のエラーを返しました:

$ sudo gem install compass

エラー:コンパスのインストールエラー:エラー:gemネイティブ拡張のビルドに失敗しました。

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

ffi.hをチェックしています... /システム/ライブラリ/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/mkmf.rb:434:in `try_do ':コンパイラは、実行可能ファイル。(ランタイムエラー)

だから私はそれからsassをインストールしようとしました:$ sudo gem install sass

同じエラーメッセージが表示された後、次のコマンドを使用してsassをインストールしました。

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

上記はsassのインストールでは機能しましたが、compassのインストールでは機能しませんでした。誰かがどこかでxcodeのインスタンスを開いてからもう一度閉じ、同じコマンドを正常に実行した後、それらが動作したことを読みました。xcodeを開こうとしたが、インストールされているxcodeのバージョンはEl Capitanと互換性がないというメッセージが表示された。そこで、アプリストアからxcodeを更新し、今回は正常に実行された次のコマンドを再実行しました。

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

その後、$ compass initを実行できました

これですべてのgemが機能し、素敵なsassの構築に取り掛かることができます:)


0

rm -rf ./vendorその後、bundle installもう一度走らなければなりませんでした。


-1

sudoを使ってインストールするのは好きではありません。sudoで始めたら、止めることはできません。

Gemsディレクトリに権限を付与してみてください。

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

2
システムRuby gemsの所有権を変更しないでください。Mac OSが何かを更新しようとすると、問題が発生する可能性があります。
ティンマン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.