haayaaa’s diary

書きたい事があったら気軽に書いて行きます。普段は渋谷でRailsを使ったお仕事してます。

irbでexitした時に出るErrno::EACCESについて

cloud9 で irb を立ち上げ、exitで抜けると以下のようなErrno::EACCESというエラーが。。。

ec2-user:~/environment $ irb
2.4.1 :001 > exit
require 'irb/ext/save-history'
/usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb/ext/save-history.rb:98:in `initialize': Permission denied @ rb_sysopen - /usr/local/rvm/rubies/ruby-2.4.1/.irbrc_history (Errno::EACCES)
from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb/ext/save-history.rb:98:in `open'
from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb/ext/save-history.rb:98:in `save_history'
from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb/ext/save-history.rb:64:in `block in extended'
`save_history' from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb/ext/save-his`save_history'
from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb/ext/save-history.rb:64:in `block in extended'
from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb.rb:433:in `block in run'
from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb.rb:433:in `each'
from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb.rb:433:in `run'
from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/irb.rb:385:in `start'
from /usr/local/rvm/rubies/ruby-2.4.1/bin/irb:11:in `<main>'

ec2-user:~/environment $

 

一応exitで抜けることはでき、問題は無いのですが、なんだかエラーが気持ち悪い。

 

https://ty-engineer.com/ruby/irbrc-config/

上記のリンクを参考に、以下のことを試したところ、irbをexitで抜けてもエラーが吐かれなくなりました!

 

 

直すまでの手順

 

.irbrc というファイルを作る。

ec2-user:~/environment $ cd ..          #上の階層へ移動
ec2-user:~ $ vi ~/.irbrc       #viエディタで .irbrc というファイルを作成

 

.irbrc ファイルを以下のように編集。

require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 200
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-history"

 

environment の階層に戻り、irbをexitでぬける。

ec2-user:~ $ cd environment
ec2-user:~/environment $ irb
2.4.1 :001 > exit
ec2-user:~/environment $ 

 無事、エラーを吐かれなくなりました!!

 

原因について

原因については、

https://ty-engineer.com/ruby/irbrc-config/ の記事が大変わかりやすく書いてあります。

 

cloud9 ではrubyをrvmでバージョン管理しているのですが、そのrvmによって引き起こされるエラーのようです。

 

もう少し詳しく述べると、「rvm 1.29.3(現在の安定版)は、IRBの履歴がHOMEの代わりにRUBY_HOMEに保存されるというバグがあります。」とのことです。

 

 .irbrc ファイルは本来ホーム配下にあるはずで、irbも ~/.irbrc を参照しているのですがそこにあるべき.irbrc ファイルがないのでエラーが起きていたようです。

(.irbrcファイルはirbの設定を記述するファイル)