Gem(gem install mygem
)をインストールしようとしたりRubyGems(gem update --system
)を更新しようとしたりするとこのエラーで失敗します。
エラー:gem ...の実行中...(Gem :: FilePermissionError) /Library/Ruby/Gems/2.0.0ディレクトリへの書き込み権限がありません。
これを解決する方法を考えている人はいますか?
/Library/Ruby/Gems/1.8ディレクトリへの書き込み権限がありません。
つまり、そこに書く権限がないということです。
これは、AppleがインストールしたRubyのバージョンです。パーミッションの問題についてはよくわからないので、 に細かい修正を加えても構いません 、私はそれを続けることはお勧めできません。
代わりに、ホームディレクトリのサンドボックスにインストールされている別のRubyを管理するために rbenv または _ rvm _ を使うことを強くお勧めします。システムRubyをめちゃくちゃにすることを心配せずに。
この2つの間では、私はrbenvを使用していますが、以前はRVMを多用していました。 rbenvはあなたのRubyインストールを管理するためにもっと "手を使わない"アプローチを取ります。 RVMには多くの機能があり、非常に強力ですが、結果としてより邪魔になります。どちらの場合でも、インストールを開始する前に、 _ _ _ のインストールマニュアルを2、3回読んでください。
Sudo
を使用する代わりに--user-install
を追加してみてください。
gem install mygem --user-install
あなたは本当に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の詳細については、以下を参照してください。
どうしますか?
Sudo gem update --system
私にとっては、問題はrbenv
を使用していて、正しいバージョンをグローバルに設定するのを忘れることが原因でした。
だから私はrbenv global xxx
でそれを設定しなければなりませんでした
私の場合は2.0.0-p247
をインストールしたのでコマンドを発行しなければなりませんでした:
rbenv global 2.0.0-p247
rbenv rehash
それからすべてはうまく働いていた。
パスを修正する必要があります
この修正が機能するかどうかを判断するには、次のコマンドを実行します。
which gem
これはあなたがする権限を持っていないディレクトリを出力するはずです:
/usr/bin/gem
これを修正するには、次の手順を実行します。
自分のプロファイルにコピーする必要があるパスを決めます。
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
}
パスを自分のプロフィールにコピーして保存します
あなたのプロフィールをリロードします(source〜/ .zshenv for me)
rbenv rehash
を実行する
これでwhich gem
を実行すると、あなたは以下の権限を持つローカルパスを取得するはずです。
/Users/justin/.rbenv/shims/gem
これは 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
Sudo gem update --system
Sudo gem install (gemfile)
2つのルートがあります:rbenvかRVMのどちらかを使用してください。以下の両方のレシピがあります。あなたがする前に、あなたはおそらく宝石のためのローカル文書のインストールをオフにしたいと思うでしょう。
echo "gem: --no-ri --no-rdoc" >> ~/.gemrc
その後:
実行します。
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システムになってしまいます。自作や、システムライブラリの上書きなどは必要ありません。
brew install rbenv Ruby-build
Sudo gem update --system
.bashrc
にエクスポートを追加します。
export RBENV_ROOT="$(brew --prefix rbenv)"
export GEM_HOME="$(brew --prefix)/opt/gems"
export GEM_PATH="$(brew --prefix)/opt/gems"
そして最後にこれをあなたの~/.gemrc
に追加してください:
gem: -n/usr/local/bin
gem update --system
これは私のために働きました。さらに、以前にrootとしてgemをインストールした場合は、所有権をあなたに戻すことでその問題を解決します(セキュリティ的に優れています)。
Sudo chown -R `whoami` /Library/Ruby/Gems
下の私の最初の答えを使う前に 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
...
Sudo
ingは必要ありません、そしてあなたはすでにインストールされているRubyを使うことができます、Appleのご好意による。
古くて賢い
私がここで言うことをしてはいけません、あなたがSudo
を使うときはいつでも用心深いことを知ってください。 rbenv
のようなものを使って、自分がしている作業をすべて切り分けることをお勧めします。
あなたがコマンドラインを好むかどうか私は知らないが、これはあなたのシステムにパッケージをインストールするどんなツールでどんなプロジェクトでも作業を楽にするだろう。
私が言うことができる限り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
ははるかに強力で、これから説明するよりもはるかに高い柔軟性が得られます。詳細については、下部の出典を参照してください。
シェルにいる場合は、ユーザー名を見つけるのは簡単です。プロンプトを見てください。私のものはこんな感じです:
breadly@breadly-desktop:~\Desktop
現在のユーザーは@
の前の名前です。エラーメッセージからディレクトリがわかりますが、2つの選択肢があります。 ../gems/1.9.1
を使って現在のバージョンにあなたの許可を制限するか、../gems
を使ってあなた自身にすべてのバージョンの宝石のために書き込み許可を与えることができます。
所有権を実際に変更するコマンドは、次のようになります。
chown -R $(whoami) /absolute/path/to/directory
-R
はフラグとして知られており、-R
フラグは通常、再帰的に何かをするようにコマンドに指示します。つまり、ディレクトリに含まれるすべてのもの、およびその中のディレクトリに含まれるすべてのものに対してコマンドを実行します。他に何もないまで。
ローカルのGemライブラリを指すようにrbenv rehash
を実行する必要がありました。
あなたのgemマネージャがシステムライブラリを指しているように見えます、それで、パーミッションをいじるのではなく、物事をローカルに指し示すためにあなたのマネージャのために "rehash"と同等のことをしてください。
私は自分のMacをフォーマットしたが、多くの提案された解決策は私のために働かなかった。私にとってうまくいったのは正しい順番のこれらのコマンドです:
自作をインストールします。
/usr/bin/Ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Rubyをインストールします。
brew install Ruby
コンパスをインストールします。
Sudo gem install compass
私のために働く:
Sudo gem uninstall cocoapods
Sudo gem install cocoapods
brew install rbenv
でrbenvをインストールしてください。
それからeval "$(rbenv init -)"
を〜/ .bash_profile(またはMacOSの場合は〜/ .zshrc)の最後に置きます。
新しい端末を開いてgem install ***
を実行するとうまくいきます。
あなたのRubyのバージョンが正しいかどうか確認してください。そうでない場合は、変更してください。
これは私のために働く:
$ rbenv global 1.9.3-p547
$ gem update --system
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...
Sudo chown -R $USER /Library/Ruby/Gems/
ユーザに$ whoamiがそれらのフォルダに何かを作成するようにします。
Sudo chown -R user /Library/Ruby/Gems/2.0.0
MacOS MojaveとSUCCESSでテスト済み。
古いRubyバージョンをすべてアンインストールします(たとえば、2.00と2.3.0があるとしましょう)。
$ rvm uninstall 2.0.0
$ rvm uninstall 2.3.0
新しいRubyバージョンをインストールします。
$ brew install Ruby
デフォルトのエイリアスをあなたのバージョンに設定します。
$ rvm alias create default Ruby
これがあなたのコンピュータが最近インストールされた新しいRubyバージョンをロードする最も安全な方法であるのであなたのシステムを再起動してください。
上記の手順を実行した後は、任意のgem
コマンドを正常に実行できます。