web-dev-qa-db-ja.com

/Library/Ruby/Gems/2.3.0ディレクトリへの書き込み権限がありません

MacOS 10.13.xでコマンドgem install bundlerを使用すると、エラーはYou don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.になります。

$ gem install bundler
Fetching: bundler-1.16.2.gem (100%)
ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
16
Chars Davy

自分の質問に回答したのか、それがあなたが推奨する解決策なのか、オンラインで検索したときに見つけたのかはわかりません。どちらの方法でも、Sudoを使用してgemをインストールすることはお勧めしません。元に戻すことができない可能性がある問題が発生する可能性があるためです。

このアクセス許可エラーが発生する理由は、macOSがMacにインストールされているRubyバージョンを変更できないためです。Macにプレインストールされているオープンソースツールの特定のバージョンApple=のみが管理することを意図しています。アクセス権エラーは理由があります。Sudoで上書きしたくない場合。

良い知らせは、Macに付属しているバージョンと干渉しない別のバージョンのRubyをインストールできることです。それが完了すると、PATHが新しいRubyバージョンの場所がPATHの最初になるように更新されました。PATHはディレクトリのリストを参照し、コンピュータはそれらを検索して実行可能プログラムを見つけます。ターミナルでecho $PATHと入力すると、コロンで区切られたディレクトリのリストが表示されます。次のようになります:

/usr/bin:/bin:/usr/sbin:/sbin

つまり、gem install bundlerと入力すると、コンピューターは/usr/bingemというプログラムを最初に検索します。これにより、Appleが提供するバージョンのRuby生きている、それはあなたにその許可エラーを与える。

Rubyの新しいバージョンをインストールした後、新しいRuby=の場所がリストの最初になるようにPATHを更新すると、コンピューターは最初にそこを探します。 gem install bundlerを実行すれば動作します。

MacにRubyをインストールする方法はいくつかあります。私が推奨する最良の方法であり、そこにあるさまざまなインストール手順でもっと広く普及したいと思っているなら、 自動化されたスクリプト は、適切なRuby環境のセットアップ(PATHの更新を含む)を行います。これにより、不適切な指示が原因でエラーが発生する可能性が大幅に減少します。ユーザーに一連のことを手動で行わせ、必要なすべての手順を理解するのはユーザーに任せます。

あなたが取ることができる他のルートは、すべてを手動で行い、最善を期待して余分な時間を費やすことです。まず、 Homebrew をインストールします。これにより、他のツールやmacOSアプリを簡単にインストールできます。

次に、Rubyの個別のバージョンをインストールする最も一般的な4つの方法は次のとおりです。

Ruby)の複数のバージョンが同時に必要ない場合(macOSに付属しているもの以外)

  • Homebrew-インストールしたら、Ruby with brew install Rubyをインストールし、echo 'export PATH="/usr/local/opt/Ruby/bin:$PATH"' >> ~/.bash_profileを実行してPATHを更新し、次にsource ~/.bash_profileを実行します

多くのRubyバージョンを簡単に切り替える柔軟性が必要な場合

  • chruby および Ruby-install -私の個人的な推奨事項と、前述のスクリプトによって自動的にインストールされる推奨事項。これらはHomebrewでインストールできます。

  • rbenv -Homebrewでインストールできます

  • [〜#〜] rvm [〜#〜]

非システムバージョンのRubyを使用していることを確認するには、次のコマンドを実行します。

which Ruby

/usr/bin/Ruby以外のはずです

Ruby -v

2.3.7以外のはずです。今日の2.6.1は最新のRubyバージョンです。

この新しいバージョンのRubyがインストールされたら、次はバンドルをインストールできます。

gem install bundler
30
monfresh

前述のように、MacではシステムRubyはrootが所有しているため、Sudoを使用してそのバージョンに対してインストールを行うのは安全ではありません。そうすると、すべてのgemがrootとして実行され、セキュリティの悪夢になります。 しないでください

以前の回答はコマンドラインfooのビットを想定しており、追加された詳細は誰かに役立つかもしれないので、私の手順を説明します。

古いシステム提供のRubyを実行していることを再確認します

which Ruby
/usr/bin/Ruby

(それがシステムパスです)

Ruby -v
Ruby 2.3.7

(旧バージョン)

brew install Ruby

または brewを最初にインストール

その最後に、インストールは言う:

/usr/local/Cellar/Ruby/2.6.3

それをパスに表示するfirst

PATH=/usr/local/Cellar/Ruby/2.6.3/bin:$PATH

再確認

which Ruby
/usr/local/Cellar/Ruby/2.6.3/bin/Ruby

バージョンを再確認

Ruby --version
Ruby 2.6.3p62

パスの更新を永続的にします(そうしないと、Rubyを使用するたびにパスを更新する必要があります)

echo  PATH=/usr/local/Cellar/Ruby/2.6.3/bin:$PATH >> ~/.bash_profile
12
joar
Sudo gem install -n /usr/local/bin bundler
4
Chars Davy