LoginSignup
0
0

【EC2】DB作成時エラーのためにVimを使ってEC2内のファイルを編集

Last updated at Posted at 2022-09-11

エラー状況

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が上」とでも覚えておく。
スクリーンショット 2022-09-11 18.52.53.png

編集したい箇所にカーソルを合わせたら、「I」キーを押す。これにより、インサートモードに切り替わり、編集を行えるようになる。今回は、エラーに書かれているようにconfig.cache_classes = trueの部分をfalseに変更する。
スクリーンショット 2022-09-11 20.55.54.png
その後、escを押し、ノーマルモードに戻す。そして、:wq!と入力して保存・終了する。

ただし、現在のユーザーに編集の権限が与えられていない場合(写真のように読込専用で開いている場合)、:wqでは保存・終了できない。
その場合は、:w !sudo tee % > /dev/nullと入力してEnterを押す。質問が表示されるので最初の質問には「o」と入力しEnter。次にもう一度Enterを押す。これで編集内容の保存が完了する。
最後に:q!と入力しEnter。これでVimから抜け出すことができる。

改めて、最初のDB作成のコマンドを実行するとエラーは解消された。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0