頭悪そうなタイトルですみません。
再びPCのセットアップをしたので、未来の自分のためにメモ。
問題
$ gem install hoge
で Permission denied
と言われる。
sudoなしにhoge入れたい。
(Permission Deniedのときは、sudo使うと便利〜というくらいが初期の認識でしたが、ことあるごとに「sudoを使ってはいけない」局面に陥ったので、sudoを使わずになんとかinstallしたい。)
ググる。
→ sudoつけてとかgem入れ直してとか出てくるけど違いそう
そもそもなにがおこってるか
- systemのrubyを使っている
- sudo権限の必要な領域に色々installしようとしている(→ sudo付けろと言われる)
→ sudoのいらない、 /usr
領域にrubyを置くと良い。
(systemのrubyを使うこと自体は問題はないが、このままinstallすると全てのuserに影響を与えてしまう)
環境
- OS X Yosemite v10.10.3
- rbenv v0.4.0
- Homebrew v0.9.5
手順ログ
すごい先輩が色々やって下さったので手順を。
デバッグ力というか・・・
$ gem install compass
ERROR: While executing gem … (Errno::EACCES)
Permission denied - /Library/Ruby/Gems/2.0.0 # compass以外でもこういうエラーが出ていた
$ which gem
/usr/bin/gem # /usr/binはsystemの権限の領域
$ rbenv versions
* system (set by /usr/local/rbenv/version) # systemのrubyを使ってた
$ which ruby /usr/bin/ruby # systemのruby使ってる
$ rbenv install -l # install可能なrubyのバージョン
$ rbenv install 2.2.2
rbenvを使ってrubyを入れ直すことで、systemではなくuser権限の配下にinstallすることができる
→ sudoつけなくて良くなる
そもそも /usr/bin/
以下がsuper user権限のものってのも分かっていなかったです。
/usr/local/bin/
以下が私が使える領域だそうです。
$ rbenv rehash
$ which ruby
/usr/local/rbenv/shims/ruby # usr領域に入った
$ which gem
/usr/local/rbenv/shims/gem
$ gem install compass
ERROR: While executing gem … (Errno::EACCES)
Permission denied - /Library/Ruby/Gems/2.0.0 # まだ出る
$ rbenv versions
* system (set by /usr/local/rbenv/version) # installしただけでsystemのrubyから切り替えてなかった
2.2.2
$ rbenv global 2.2.2 # rubyのバージョン切り替え
$ rbenv versions
system
* 2.2.2 (set by /usr/local/rbenv/version)
$ gem install compass
Fetching: ffi-1.9.8.gem (100%)
…
9 gems installed
1つのrubyに対して1つのgemがある(この表現でいいのか怪しい)
→ 「使ってるrubyがおかしいんじゃないか」
という発想に自分で至らなかったので、ひたすらgemとかrbenvとかの対処を探していました。
根本的にエンジニア向いていない感のする3年目…。
裏側の理解が怪しいと全体的に怪しい。危ない。
3年目でこれかよ〜的なことを(やさしく)言われたので、次移行するときは記事を探してパパッとできるようになりたいです(希望)
移行の度に必要なものが違ったり、間違って入れたいらんものとかある気がして躊躇してましたが、Brewfileを使えるように用意しようと思いました。。