クロ@プログラミングと釣り好き大学生のブログ

プログラミングと釣りと、ときどき日常生活

デフォルトrubyの罠 〜mac sierra〜

こんばんは!!

 

f:id:Yuki-F:20170717201300p:plain

今日はrailsのお話です。

 

最初のrails入れるのにだいぶ苦労していた僕ですが
先日友人に「railsをpcに入れようとしたらエラーが色々でて、困っている」との連絡

が、、、


実際に会ってみて見ると、
僕も最初ruby入れる際にハマった罠だったので今回、記事にすることに決めました。

 

端的にいうと
.rbenv配下に入れたrubyをpcが読み取ってくれず、rails入れる時にエラーが出てしまう。

 

そして、その原因として
macにはデフォルトでrubyが入っていて、そこをbashが読み取りにいっている。

さらに、ぶつかったものとして

OS X El capitan以降からデフォルトrubyのアンインストールをしようとするとoperation not permittedが出る。

 

結論としては、

bash_profieの中でPATH設定を加えたら上手くいきました。

*ただ根本的な解決になっているのかは怪しいです。。。

 

ちなみに結論に行くまでにやっていたこととして

・usr/bin/ruby をアンインストールしようとするが、できない。→chmodしても

permission error。

・rbenv global でrubyのversionを指定していた。→rbenv versionでも切り替わっているのが確認済み

 

 

Macにはデフォルトでrubyが入っている。

おぉそれならデフォルトのruby使えば良いじゃん!ってなると思うのですが問題が。。。

versionが古い!

そうなんです。デフォルトのrubyのversionは今回 2.0.0だったんですが

最新は2.4.1でなかなかversionが古い。

そして、デフォルトrubyを使わない理由(今の僕の理解範囲)として

・古いので公式のサポートがない。バグとかセキリュティの面で不安。

・最新versionはメソッドが増えていたり便利

などなど、、

そして、それを解決するためにrubyのversion管理ツールであるrbenvを使って最新versionにしていきます。

 

今回のエラー

rbenvで最新のrubyをインストールするまでは上手く行ったのですが、gem install bundlerをしたときに permision errorが出ました。。。

 

これはmacデフォルトruby(usr/bin/rubyがある)を読みにいっているかつ、OS El Capitan以降、セキリュティが強化されて、/usr以下のルートディレクトリは sudo使わないとインストールできないみたいです。

 

ここで一回強行で、sudo gem install bundlerをすると上手くいきましたが 

またまた、問題が!!

sudo gem install rails を打つと

ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

 ありゃ?

bundlerはsudoでできたけど、railsはできない。。

 ここで which rubyをすると

usr/bin/ruby を読み取っている。

 

....おい! もっと前に気づけよ、俺笑

急いでいたため、rbenv  versionsで見て、ruby -v の確認コマンド打っていなった僕。

ってことで、デフォルトrubyを潰す作業に入るが最初の冒頭 に書いたようにできず。。

 ならば 読み取るpath変えて、usr/bin/rubyではなく/.rbenv配下のrubyを読み取れるようにしそこに入れるようにしました

 

~/.bash_profileをホームディレクトリの配下に作りました

解決策として、

ホームディレクトリの中に .bash_profileを作って、その中に 

eval "$(rbenv init -)"

 と打ち

$ source ~/.bash_profile

で反映させて、bashを再度起動(これ忘れがち)させ

ruby -v を打つと

 

ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]

 

できてる!!

 

which ruby を打つと

/Users/user_name/.rbenv/shims/ruby

 

できてる!!

 

ということで一旦落着。

 

別の解決策の可能性として

Rootlessを解除してデフォルトrubyを潰す。(参照:http://gabekore.org/emacs-auto-install-err-443)

とか、他にも解決策ありそうな予感。

 

 

今回参考にさせていただた記事です。

インストール手順参考

https://design4b.co.jp/blog/rails5_1-install-mac-2017

 

〜〜エラー参考〜〜

・rbenvでのversion切り替え:http://qiita.com/akatsuki174/items/c0384b9903b4b5cbbdaf

bash_profile内コマンド:https://github.com/rbenv/rbenv/issues/938

・初期ruby罠について:http://gabekore.org/mac-default-ruby-problem

・gem install 権限について:http://qiita.com/tokimari/items/feda1ed61f2d8b5b317c

 

〜〜今後詳しく調べること〜〜

・中盤で書いた、railsがsudoを使ってもインストールできなかった理由は何か

bash_profile, bashrc とか設定ファイルがあるけど、その読み込みの優先順位と仕組み

・rbenv/shims  のshimsの必要性 

・そもそもappleはなぜmacにデフォルトでruby入れてるの