おもむろにgemをインストールした際に以下のようなエラーに遭遇しました。
$ gem install foreman
Fetching: thor-0.19.4.gem (100%)
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
エラーログをみるとYou don't have write permissions
と書いてあります。
上記のようなエラーの原因ですが、結論からいうと、システムのrubyを利用しているため、権限不足でgemのインストールができない可能性が高いです。
ルート権限でシステムのRubyにインストールをしてもいいのですが、開発環境ではrbenvでrubyを管理することをおすすめします。
以下では、今回遭遇したエラーをrbenvでRubyを管理することで解決するまでの手順について説明をします。
現状確認
まずはgemやrubyがどのパスを指しているのか現状の確認をします。
以下の結果からわかるように/usr/bin
というシステムのパスを指していることがわかります。
$ which gem
/usr/bin/gem
$ which ruby
/usr/bin/ruby
rbenvでrubyを管理する
rbenvでrubyを管理するための手順について説明します。
まずはrbenvのインストールをします。
$ brew update
$ brew install rbenv ruby-build
rbenvで管理されているrubyのバージョンを確認します。
以下のように、現在のrubyはsystem
を利用していることがわかります。
$ rbenv versions
* system (set by /Users/toshiharu.nishina/.rbenv/version)
rbenvの管理下にrubyをインストールします。
インストールできるrubyのバージョンは以下のコマンドで確認ができます。
$ rbenv install -l
今回は最新のRuby安定版である2.5.3(2018年11月現在)をインストールします。
$ rbenv install 2.5.3
インストール後もう一度以下のコマンドを叩いてみます。
先ほどインストールされた2.5.3
というバージョンが新しく追加されていることがわかります。
$ rbenv versions
* system (set by /Users/toshiharu.nishina/.rbenv/version)
2.5.3
2.5.3
をglobalで利用するように変更します。
なお、アプリごとにrubyのバージョンを変更したい場合はrbenv local
コマンドを利用します。
$ rbenv global 2.5.3
上記コマンドを実行後、rbenvで管理されたrubyに変更されます。
$ rbenv versions
system
* 2.5.3 (set by /Users/toshiharu.nishina/.rbenv/version)
rbenvにパスを通すため、シェルの設定ファイル(.bashrcや.zshrc)に以下を追加します。
[[ -d ~/.rbenv ]] && \
export PATH=${HOME}/.rbenv/bin:${PATH} && \
eval "$(rbenv init -)"
設定後確認
シェルを再起動後、もう一度gemとrubyのパスを確認してみます。
はじめはシステムのパスを指していましたが、以下のようにrbenvのパスを指していることがわかります。
$ which ruby
/Users/toshiharu.nishina/.rbenv/shims/ruby
$ which gem
/Users/toshiharu.nishina/.rbenv/shims/gem
rbenvでrubyを管理することで、もともとエラーになっていたgem install foreman
を実行することができるようになりました。
さいごに
今回紹介したrbenvについては『複数のバージョン管理も楽々!rbenvを利用したruby管理方法チュートリアル』で詳細解説をしていまのでぜひご覧になってください!
ツイッター(@nishina555)でもプログラミングに関する情報発信をしているのでフォローしてもらえるとうれしいです!
Comments
rbenvのインストールを
sudo
付きでやってしまったのかsudo rbenv install {version}
とやったのかはわからないけどrbenv管理下のフォルダのオーナーがrootになってる事例も見たことあります。
@asm
なるほど、そういったケースもあるんですね。
rbenvでrubyを管理していてもroot権限でしか利用ができなければパーミッションエラーが起きてしまうってことですね。
共有ありがとうございます!
Macでsassがインストールできずにどん詰まりしていましたがこちらで解決しました。ありがとうございます。
@koh_y1 ご丁寧にありがとうございます。参考になったようでよかったです!
@alt 編集リクエストありがとうございました。
console
よりもzsh
を指定したほうがシンタックスハイライト的に良さそうだったので、zsh
を指定するように修正しました。sassコマンドを入力したら
とエラーが出てしまい。
Try: ~~
のコマンドもパーミッションエラーで受け付けてもらえなかったので、こちら参考になりました。むしろ、rbenvでinstallまだしていなかったんだな。。
@missyyy フィードバックありがとうございます。問題解決したようでよかったです。
冒頭の「システムのRuby」とはどういった意味でしょうか。
パスを追記してシェル再起動してもシステムのrubyとgemを参照してしまうんですが、どうしたら良いですか?
@HomMarkHunt ありがとうございます。
今まで全然気が付かれていなかったみたいですね。編集リクエスト助かりました。
記事参考になりました、ありがとうございます
ちいさなtypo見つけたので修正しておきます by HomMarkHunt 2022/06/17 23:11
Let's comment your feelings that are more than good