こんにちは。たにやんです。記事を見ていただきありがとうございます。
初歩的なエラーですがつい先日にも同じエラーでつまづき何回も同じエラーでつまづいては効率が悪いと思い、
記事を書くことにしました。
やりたいこと
プロフィール編集のページを作ろうと思い、usersテーブルに新しくカラムを追加したい。
そこで以下を実行
rails db:migrate
結果
rails aborted!ActiveRecord::DatabaseConnectionError: There is an issue connecting with your hostname: db.
Please check your database configuration and ensure there is a valid connection to your database.
Caused by:
Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (8)
毎度おなじみのMysql関連の登場です。とりあえずエラー内容をコピペしてググってみると以下のサイトがヒットしました。
こちらのサイトと同じで自分もローカル環境でコマンドを叩いていたためエラーが起こっていると判断。
そこで次はdocker環境上で
docker-compose exec web rails db:migrate
とし、これで解決!と思いきや。。。
OCI runtime exec failed: exec failed: unable to start container process: exec: "rails": executable file not found in $PATH: unknown
また違うエラーが発生しました。ナニコレ?
とりあえず落ち着いて再度ググってみることに。すると
似たようなサイトがありました。こちらのサイトによるとrailsコマンドの前にはbundle execコマンドを付けるとのこと。
そうやったっけ?
そこで
docker-compose exec web bundle exec rails db:migrate
とすると
ERROR: No such service: bundle
またか。笑
さて腐らずググり倒してやりましょう!!
自分のdocker-compose.ymlの設定を見てみると
services:
app:
build:
context: .
# =========ローカルと本番切り替え===========
#command: bundle exec puma -C config/puma.rb -e production
command: bundle exec puma -C config/puma.rb
# ======================================
そもそもサービス名はwebではなくappでした。
そこで次は
docker-compose exec app bundle exec rails db:migrate
これでどうや!!
ハイ、無事に追加したカラムを更新することが出来ました。
bundle execって何気に使っているけど今度ちゃんと調べてまた記事にしよかな。