初めに
- 学習中に生じたエラーについて解決方法のプロセスを記述していこうと思います。
問題
docker-compose up後にRailsサーバーが立ち上がるようにしたいが、立ち上がらない。
原因としてはweb側のコンテナが勝手にExitedされているから。
logを確認してみる。
web-1 | => Booting Puma web-1 | => Rails 7.0.6 application starting in development web-1 | => Run `bin/rails server --help` for more startup options web-1 | Exiting web-1 | A server is already running. Check /workdir/tmp/pids/server.pid. web-1 exited with code 1
- A server is already running. Check /workdir/tmp/pids/server.pid.の部分でまだ立ち上げていないのに、サーバーが立ち上がっていると表示されている。
原因
以前に起動した時に作成されたserver.pidというファイルが残ってしまったため。
サーバ起動のたびにserver.pidの削除を行う。
解決方法
rm tmp/pids/server.pidを実行する。
問題は解決するが、いちいちコマンドを実行しなければいけないので面倒である。
docer-compose.ymlの修正を行う。
修正前
version: '12' services: db: image: postgres web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/workdir ports: - "3000:3000" depends_on: - db
修正後
version: '12' services: db: image: postgres web: build: . command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/workdir ports: - "3000:3000" depends_on: - db
- これで次回起動してもrm tmp/pids/server.pidを実行しなくても良くなる。
結語
server.pidが作成されると次にサーバーを起動しても勝手にexitedされてしまう。
server.pidを削除することで解消される。
毎回起動前にserver.pidを削除するのは手間なのでdocker-compose.ymlを修正する。