0
0

Railsのサーバ起動してDBがなかった話(db:create,rails: not found)

Last updated at Posted at 2024-09-10

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 を削除するように設定するらしい。

docker-entrypoint.tt
#!/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

私の場合はこれで解決しました。

参考文献

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