Railsのサーバ起動してDBがなかった話
目次
前置き
前回はキー設定まで完了しました。
docker-compose up
でサーバーを起動し直して、http://localhost:3000
にアクセスしたところ、DBがないと言われました。
本編
DBがないなら、一旦サーバ閉じて起動しなおそう。
$ docker-compose down --remove-orphans
$ docker-compose build
$ docker-compose run web rails db:create
なんか変なの出てきた。
[+] Creating 1/0
✔ Container todo_app-db-1 Running
/rails/bin/docker-entrypoint: line 13: exec: rails: not found
docker-entrypoint...? ナニソレ。ん?どうしてrailsが見つかってないの?
docker-entrypointについて調べるとentrypoint.sh はスクリプトファイルで Dockerfile で指定したタイミングで実行されて、 server.pid が存在するとサーバーが起動できない対策のために server.pid を削除するように設定するらしい。
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /app/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
こんな感じに書かないといけないみたい。初めて知ったな〜
じゃあ、再びイメージからビルドして、db:createしよ
ん?エラー変わらない。
調べてると同士発見!
既存のアプリでdocker-compose up後、db:createができない
RUN gem install rails
Dockerfileに上の文を追加したらいいんだって。(変なとこに追加するとエラー出るよ。)
ではでは、DBを作成しよう。
$ docker-compose build
$ docker-compose run web rails db:create
[+] Creating 1/0
✔ Container todo_app-db-1 Running 0.0s
Created database 'myapp_development'
Created database 'myapp_test'
できた!🥳
要約
DBがないと言われた場合は、以下のコマンドを実行しましょう。
$ docker-compose build
$ docker-compose run web rails db:create
その際に、以下のような文が出た場合は
/rails/bin/docker-entrypoint: line 13: exec: rails: not found
Dockerfileに以下の文を追加しましょう。
(変なとこに追加するとエラーが出ます。)
RUN gem install rails
追加できたら、もう一度ビルドして、DB作成しましょう。
$ docker-compose build
$ docker-compose run web rails db:create
私の場合はこれで解決しました。