web-dev-qa-db-ja.com

GemのインストールまたはRubyGemsの更新がパーミッションエラーで失敗する

Gem(gem install mygem)をインストールしようとしたりRubyGems(gem update --system)を更新しようとしたりするとこのエラーで失敗します。

エラー:gem ...の実行中...(Gem :: FilePermissionError)
 /Library/Ruby/Gems/2.0.0ディレクトリへの書き込み権限がありません。

これを解決する方法を考えている人はいますか?

508
Gaurav

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

つまり、そこに書く権限がないということです。

これは、AppleがインストールしたRubyのバージョンです。パーミッションの問題についてはよくわからないので、 に細かい修正を加えても構いません 、私はそれを続けることはお勧めできません。

代わりに、ホームディレクトリのサンドボックスにインストールされている別のRubyを管理するために rbenv または _ rvm _ を使うことを強くお勧めします。システムRubyをめちゃくちゃにすることを心配せずに。

この2つの間では、私はrbenvを使用していますが、以前はRVMを多用していました。 rbenvはあなたのRubyインストールを管理するためにもっと "手を使わない"アプローチを取ります。 RVMには多くの機能があり、非常に強力ですが、結果としてより邪魔になります。どちらの場合でも、インストールを開始する前に、 _ _ _ のインストールマニュアルを2、3回読んでください。

295
the Tin Man

Sudoを使用する代わりに--user-installを追加してみてください。

gem install mygem --user-install
346
nathanwhy

あなたは本当にRubyバージョンマネージャを使うべきです。

gem updateコマンドを実行するとき、適切にそれを使用することはあなたの許可問題を防ぎそして解決することができます。

rbenv をお勧めします。

ただし、Rubyバージョンマネージャを使用している場合でも、同じエラーメッセージが表示されることがあります。

もしあなたがrbenvを使っているのなら、~/.rbenv/shimsディレクトリがシステムRubyのパスの前にあることを確認してください。

$ echo $PATHはロードパスの順番を表示します。

あなたのshimsディレクトリがあなたのシステムのRuby binディレクトリの後にあることに気づいたら、あなたの~/.bashrcファイルを編集して、これをあなたの最後のエクスポートPATHコマンドとして入れてください: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の詳細については、以下を参照してください。

87
l3x

どうしますか?

Sudo gem update --system
76
Bobz

私にとっては、問題はrbenvを使用していて、正しいバージョンをグローバルに設定するのを忘れることが原因でした。

だから私はrbenv global xxxでそれを設定しなければなりませんでした

私の場合は2.0.0-p247をインストールしたのでコマンドを発行しなければなりませんでした:

rbenv global 2.0.0-p247
rbenv rehash

それからすべてはうまく働いていた。

30
Hendrik

パスを修正する必要があります

この修正が機能するかどうかを判断するには、次のコマンドを実行します。

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

  case "$command" in
  rehash|Shell)
    eval `rbenv "sh-$command" "$@"`;;
  *)
    command rbenv "$command" "$@";;
  esac
}
  1. パスを自分のプロフィールにコピーして保存します

  2. あなたのプロフィールをリロードします(source〜/ .zshenv for me)

  3. rbenv rehashを実行する

これでwhich gemを実行すると、あなたは以下の権限を持つローカルパスを取得するはずです。

/Users/justin/.rbenv/shims/gem
22
Justin Leveck

これは MacOs Mojave の問題をきれいに修正します。

brew install Ruby

次に、GEM_HOMEを自分のユーザーディレクトリに設定します。端末で:

Bash

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME=$HOME/gems' >> ~/.bashrc
echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

Zshの場合は、

echo '# Install Ruby Gems to ~/gems' >> ~/.zshrc
echo 'export GEM_HOME=$HOME/gems' >> ~/.zshrc
echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.zshrc
source ~/.zshrc
20
Fmessina
Sudo gem update --system
Sudo gem install (gemfile)
17
Eliot Arntz

2つのルートがあります:rbenvかRVMのどちらかを使用してください。以下の両方のレシピがあります。あなたがする前に、あなたはおそらく宝石のためのローカル文書のインストールをオフにしたいと思うでしょう。

echo "gem: --no-ri --no-rdoc" >> ~/.gemrc

その後:

install rbenv

install Ruby-build

実行します。

rbenv install 2.1.2 (or whatever version you prefer)
rbenv global 2.1.2
gem update --system

これはあなたのローカルディレクトリに最新バージョンのgemシステムをインストールします。それはあなたがシステム設定に干渉しないことを意味します。あなたがこの質問をしているのであれば、あなたはシステムセキュリティをめちゃくちゃにすべきではありません。オペレーティングシステムとプログラミングについて詳しく知っているときは、後でInfoSecを学んでください。

代わりに 'RVM'を代わりに使ってください。 install rvm run:

rvm install 2.1.2
rvm use 2.1.2
gem update --system

これは同じ結果になります、あなたはシステムのバージョンを妨げないローカルのRubyとGemシステムになってしまいます。自作や、システムライブラリの上書きなどは必要ありません。

14
JezC

このSudoless gemの使い方

  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

13
gopek

これは私のために働きました。さらに、以前にrootとしてgemをインストールした場合は、所有権をあなたに戻すことでその問題を解決します(セキュリティ的に優れています)。

Sudo chown -R `whoami` /Library/Ruby/Gems
13

下の私の最初の答えを使う前に nathanwhyの答え を試してみてください。 --user-installの彼の推薦は、あなたの.bash_profileを熟考したり、あなたのRubyバージョンを決定したりする必要なしに、同じ目的を達成するはずです。


特定のRubyバージョンを気にしないのであれば、 ヘビーリフトのRuby環境マネージャオプション をスキップして、これらの行を~/.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のご好意による。

13
Michael

古くて賢い

私がここで言うことをしてはいけません、あなたがSudoを使うときはいつでも用心深いことを知ってください。 rbenvのようなものを使って、自分がしている作業をすべて切り分けることをお勧めします。


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がアクセスを必要とするディレクトリを私たちに与えてくれているのを見てください。それはよく使われるディレクトリのようです。

この場合、問題を解決するために知っておくべきことは3つしかありませんが、chownははるかに強力で、これから説明するよりもはるかに高い柔軟性が得られます。詳細については、下部の出典を参照してください。

二つのこと

  1. Username
  2. ディレクトリ

シェルにいる場合は、ユーザー名を見つけるのは簡単です。プロンプトを見てください。私のものはこんな感じです:

breadly@breadly-desktop:~\Desktop

現在のユーザーは@の前の名前です。エラーメッセージからディレクトリがわかりますが、2つの選択肢があります。 ../gems/1.9.1を使って現在のバージョンにあなたの許可を制限するか、../gemsを使ってあなた自身にすべてのバージョンの宝石のために書き込み許可を与えることができます。

所有権を実際に変更するコマンドは、次のようになります。

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

-Rはフラグとして知られており、-Rフラグは通常、再帰的に何かをするようにコマンドに指示します。つまり、ディレクトリに含まれるすべてのもの、およびその中のディレクトリに含まれるすべてのものに対してコマンドを実行します。他に何もないまで。

12
Breedly

ローカルのGemライブラリを指すようにrbenv rehashを実行する必要がありました。

あなたのgemマネージャがシステムライブラリを指しているように見えます、それで、パーミッションをいじるのではなく、物事をローカルに指し示すためにあなたのマネージャのために "rehash"と同等のことをしてください。

12
bobbdelsol

私は自分のMacをフォーマットしたが、多くの提案された解決策は私のために働かなかった。私にとってうまくいったのは正しい順番のこれらのコマンドです:

  1. 自作をインストールします。

    /usr/bin/Ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
  2. Rubyをインストールします。

    brew install Ruby
    
  3. コンパスをインストールします。

    Sudo gem install compass
    
11
Herbi Shtini

私のために働く:

Sudo gem uninstall cocoapods

Sudo gem install cocoapods
5
evya

brew install rbenvでrbenvをインストールしてください。

それからeval "$(rbenv init -)"を〜/ .bash_profile(またはMacOSの場合は〜/ .zshrc)の最後に置きます。

新しい端末を開いてgem install ***を実行するとうまくいきます。

4
zhao

あなたのRubyのバージョンが正しいかどうか確認してください。そうでない場合は、変更してください。

これは私のために働く:

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

Bobbdelsolが指摘したように、rehashは私のために働きました:

==> 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...
2
Arunabh Das

Sudo chown -R $USER /Library/Ruby/Gems/

1
vaskort

ユーザに$ whoamiがそれらのフォルダに何かを作成するようにします。

Sudo chown -R user /Library/Ruby/Gems/2.0.0
0
Rama Astadipati

MacOS MojaveとSUCCESSでテスト済み。

  1. 古いRubyバージョンをすべてアンインストールします(たとえば、2.00と2.3.0があるとしましょう)。

    $ rvm uninstall 2.0.0

    $ rvm uninstall 2.3.0

  2. 新しいRubyバージョンをインストールします。

    $ brew install Ruby

  3. デフォルトのエイリアスをあなたのバージョンに設定します。

    $ rvm alias create default Ruby

  4. これがあなたのコンピュータが最近インストールされた新しいRubyバージョンをロードする最も安全な方法であるのであなたのシステムを再起動してください。

上記の手順を実行した後は、任意のgemコマンドを正常に実行できます。

0
Marcelo Gumiero