ターミナルで入力するコマンドでたまに出てくるsudoだが、これのせいで私は半日程度苦しんだのでここに残しておく。
Ruby on Rails チュートリアルをやっていたときに途中で自分のコードがおかしくなり、仕方なく筆者の方のgithubからクローンしてやり直すことになった。
その際master.keyファイルが無かったため、
master.keyが見つからない問題 [初見殺し] - はじめてのデプロイで嵌るポイント
の記事などを参考にしてcredentialsyml.encも消してから自分で新しく二つとも作り直そうとして、ターミナルで
sudo EDITOR="vi" rails credentials:edit
を実行した。
「管理者権限が必要なんやなー」くらいのノリで実行したが、
結論から言えばこのsudoが悪さをしており、sudo無しで
EDITOR="vi" rails credentials:edit
と実行すれば正解であった。
上記でsudoを使用した弊害として、rails s rails routesなどのコマンドを打つと
/Users/ユーザー名/.rbenv/(略)/encrypted_file.rb:118:in `binread': Permission denied @ rb_sysopen - /Users/ユーザー名/environment/sample_app/config/master.key (Errno::EACCES)
というエラーが出た。
どうやらファイルへの権限から来るエラーのようだったが、
前後どっちのファイルの権限を直せば良いのかわからなかった。
.rbenvの方の権限を直そうとしたがうまくいかず、
master.keyの方も何回も作り直したがうまくいかなかった。
しかしmaster.keyを作り直すというのは実は合っていたようだ。
sudoは管理者権限で何でもできる便利なコマンドだなーと思っていたら、
どうやらsudoを使ってターミナルで実行すると生成されたファイルとかも管理者じゃないとアクセスとかがダメになってしまうらしいという記事
Ruby gem install bundler で Permission denied エラーになった
等を見つけたので、試しにsudoを外して
EDITOR="vi" rails credentials:edit
でmaster.keyを作ったら一発だった。
当然sudoが便利なときや必要な時はあるのだろうが、こういったトラブルの元になることもあるため慎重に使っていきたい。