エラー状況
railsによるアプリケーションの環境をdockerで構築し、以下のコードをEC2の中で実行し、データベースを作成しようとした。
docker-compose exec app rails db:create db:migrate RAILS_ENV=production
すると次のようにエラーが返ってくる。
/usr/local/bundle/gems/spring-4.0.0/lib/spring/application.rb:101:in `block in preload': Spring reloads,
and therefore needs the application to have reloading enabled.
Please, set config.cache_classes to false in config/environments/production.rb.
(RuntimeError)
要するにconfig/environments/production.rbに書かれてある、config.cache_classesの設定をfalseにしろやということなので言われた通りにしたいと思う。
ファイルの内容を編集するにあたって、EC2の中でVisual Studioなどのテキストエディタ(個人的にはAtom派です)を開くわけにもいかないので、コマンドラインで編集ができるVimを使っていく。
Vim
Vimは古くからあるテキストエディタで、上述のように、コマンドラインを使ってファイルを編集するタイプのもの。何かの拍子でVimが開いてしまった時、その存在を知らない人はctrl+Cやexitを実行しても抜け出せない恐怖に焦ることになるだろう。早速触れていきたいと思う。
まず、ec2にログインし、vim --version
を実行してみると、デフォルトでVim8.2がインストールされていることが分かる。
$ vim --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jul 12 2022 21:26:30)
今回、編集したいファイルはアプリケーションの中のconfig/environments/production.rbなので、cdコマンドでアプリケーションのディレクトリに移動した上で以下を実行する。
vim config/environments/production.rb
vimが開き、ファイルの中身が表示される。ただしこの状態ではノーマルモードなので、編集はできない。まずは一旦、編集したい箇所にカーソルを合わせる。操作方法は「H」キーが左移動、「L」キーが右移動、「K」キーが上移動、「J」キーが下移動の操作になる。まあ、HとLはそれぞれキーボードの右と左に配置されているので分かりやすい。JとKについては「Jimenが下、Kamiが上」とでも覚えておく。
編集したい箇所にカーソルを合わせたら、「I」キーを押す。これにより、インサートモードに切り替わり、編集を行えるようになる。今回は、エラーに書かれているようにconfig.cache_classes = true
の部分をfalseに変更する。
その後、escを押し、ノーマルモードに戻す。そして、:wq!
と入力して保存・終了する。
ただし、現在のユーザーに編集の権限が与えられていない場合(写真のように読込専用で開いている場合)、:wq
では保存・終了できない。
その場合は、:w !sudo tee % > /dev/null
と入力してEnterを押す。質問が表示されるので最初の質問には「o」と入力しEnter。次にもう一度Enterを押す。これで編集内容の保存が完了する。
最後に:q!
と入力しEnter。これでVimから抜け出すことができる。
改めて、最初のDB作成のコマンドを実行するとエラーは解消された。