Ruby
RubyOnRails
RubyMine

Ruby Mineでgem install時にパーミッションエラーが発生する時の対処

覚書です

問題

RubyMine利用時に、gemを必要とする動作をするとパーミッションエラーが発生する時があります。
例えばデバッグモードとか、デバッグモードとか・・・・

原因

そもそも、パーミッションエラーがでる原因は、管理者、もしくは持ち主以外が触れないデータに変更を加えようとしているから。

サンプルエラー↓

Error running 'something'
            Gem のインストールに失敗しました. 次の gem はインストールされていません:
            /Applications/RubyMine.app/Contents/rb/gems/ruby-debug-ide-0.6.1.beta12.gem:  Error installing ruby-debug-ide-0.6.1.beta12.gem:
            ERROR: Failed to build gem native extension.      current directory: /Users/unkoman/.gem/ruby/2.3.0/gems/ruby-debug-ide-0.6.1.beta12/ext /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby mkrf_conf.rb Installing base gem You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory. /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/installer.rb:692:in `verify_gem_home'   /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/installer.rb:811:in `pre_install_checks'   /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/installer.rb:278:in `install'   /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/resolver/specification.rb:97:in `install'   /System/Library/Fra... (show balloon)

-今回は、管理者権限(sudo)が必要なファイルへ書き込みしようとしている。
上の例で言うと/Library/Ruby/Gems/2.3.0 directoryの中のgemフォルダーに書き込もうとして怒られています。

解決策

現在ログイン中のユーザーがファイル変更の実行権限を得られれば回避できると言うことです。
しかし、管理者権限のファイルに変更をすると、予期せぬ不具合や、他のユーザーにまで影響してしまいます。

そこで、rbenv(RuByVersionManagement)と言われるRubyのバージョン管理アプリを使います。

このrbenvですが、作業中のユーザー管理下に管理者とは別のRuby動作環境を用意してくれるので、今回のように管理者権限下のデータを触りたくない時にぴったりです。

また、名前どおりにRubyのバージョンを指定して利用することができるので非常に便利です。

操作手順

1.homebrewでインストール
2.RubyMineの設定
3.実行

私の環境ではHOMEBREWを使ってインストールしました。

#何はともあれインストール
unkoman$brew install rbenv
#rbenvの面倒臭い作業をちょっと楽にしてくれるgemもついでにインストール
unkoman$brew install rbenv-gem-rehash

#rbenvでインストール可能なRubyのバージョン一覧を取得
unkoman$rbenv install -l

#インストールしたいバージョンを指定してインストール
unkoman$rbenv install 2.5.0

RubyMineの設定(メニューから)

1.RubyMine→Preferences
2.左メニューからRuby SDK および Gemを選択
3.rbenv: 2.5.0を選択する

以上

その他

今回の方法hではあくまでも、RubyMineで使うRubyの設定なのでRubyMineじゃないとき、Rubyはrbenv環境で動作しません。
システムのRubyのバージョンもついでにrbenvで使いたい位場合には、少しだけ別の作業が必要になります。

#現在のRubyのバージョンを確認
unkoman$ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [universal.x86_64-darwin17]
#bash(ターミナル)の設定ファイルを弄る。ホームディレクトリ直下に無い場合は作りましょう
unkoman$cd ~
unkoman$ls -a
Download    Desktop         Library 
Movies      Music           Applications
Something   Something       Some
.           .bash_sessions

#上記のような感じで一覧を出して.bash_profileが無い場合はファイルを作ります
unkoman$touch .bash_profile
#次に.bash_profileを編集します
unkoman$vim .bash_profile

vimエディターとかでさっき作った.bash_profileに以下を記述して保存

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
#rbenvを普段から使います宣言
unkoman$rbenv global 2.5.0

#terminalを再起動
#ちゃんと普段使いのRubyがrbenvのバージョンになっているか確認
unkoman$ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]#バージョンが変わりました