mitsu1208g
@mitsu1208g (洋満 大石)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

開発環境(Docker-compose)では問題ないが、本番環境でMysql2::Error::ConnectionError: Unknown MySQL server host 'db' (2)がでてデプロイ(Capistrano)できない

プログラミング学習を始めて2ヶ月の初学者です!
勉強のためにDockerを構築し、ローカルでは問題なく表示できていたのですが、デプロイに苦戦しています;

本番環境

Rails6
amazon linux2
EC2
Nginx
Unicorn
mariaDB

問題

・Capistrano3でデプロイ((bundle exec cap production deploy))するとMysql2::Error::ConnectionError: Unknown MySQL server host 'db' (2)のエラーが出てデプロイできない。
・Docker導入前は問題なくデプロイできていた。

コード

dockerfile
FROM ruby:2.6.5
RUN apt-get update -qq && \
    apt-get install -y build-essential \ 
                       libpq-dev \        
                       nodejs      

RUN mkdir /myapp

ENV APP_ROOT /myapp 
WORKDIR $APP_ROOT

ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock

RUN gem install bundler 
RUN bundle install
ADD . $APP_ROOT
docker-compose.yml
version: '3'

services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 'password'
      MYSQL_DATABASE: root
    ports:
      - "4306:3306"

  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  socket: /tmp/mysql.sock
  host: db
  ports: 3306 

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  database: myapp_production
  username: root
  password: <%= ENV['DATABASE_PASSWORD'] %>
  socket: /var/lib/mysql/mysql.sock

仮説

エラー分そのままに、databaseが見つからない(host'db'がみつからない)

試したこと

・docker-composeの再ビルド
・docker-compose exec web rails db:create
・docker-compose exec web rails db:migrate
・EC2インスタンスから再起動
・database.ymlのdefaultにports: 3306を記述
・host'db'をhost'localhost'にしてみる

mariaDBを使っていてもimageがmysqlでも互換性があるので問題ないと思いますし、volumesは永続化になることですので、本番環境ではデータはEC2にあるから今回の本質的な問題ではないのでは・・・?と混乱しています;
基礎的なことかもしれませんがまだまだ応用できず、解決の糸口が見つかりません。
どうぞよろしくお願いいたします!m(_ _)m

0

1Answer

こちらひとまず解決しました。
database.ymlのdefaultで

password: password

host: db

をコメントアウトすることで引っ掛からなくなりました。

2Like

Your answer might help someone💌