前提・実現したいこと
EC2にデプロイをしたのですが、ページが表示されず
The page you were looking for doesn't exist. と表示されていました。
unicorn.stderr.logを見たところ、
Unknown MySQL server host 'db' (-2) (ActiveRecord::ConnectionNotEstablished)
とあったのでこのエラーを解決することでデプロイしたものが表示されると考えています。
エラー文から察するにdatabase.ymlの記述に問題があると考えていますが解決方法がわかりません。
懸念点として、下記のサイトを参考に作業を進めているのですがDBをMariaDBではなくMySQLを使用しているため、もしそれが原因の場合はMariaDBを使用してくださいと回答をいただけると嬉しいです。
https://pikawaka.com/rails/ec2_deploy
発生している問題・エラーメッセージ
unicorn.stderr.log
I, [2022-04-21T00:17:16.470564 #5809] INFO -- : Refreshing Gem list I, [2022-04-21T00:17:17.358938 #5809] INFO -- : unlinking existing socket=/var/www/rails_portfolio/tmp/sockets/unicorn.sock I, [2022-04-21T00:17:17.359138 #5809] INFO -- : listening on addr=/var/www/rails_portfolio/tmp/sockets/unicorn.sock fd=9 E, [2022-04-21T00:17:17.374145 #5809] ERROR -- : Unknown MySQL server host 'db' (-2) (ActiveRecord::ConnectionNotEstablished) /home/ec2-user/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activerecord-6.1.5/lib/active_record/connection_adapters/mysql2_adapter.rb:45:in `rescue in new_client'
該当のソースコード
database.yml
database.yml
default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: host: localhost development: <<: *default database: myapp_development host: db username: root password: password test: <<: *default database: myapp_test host: db username: root password: password production: <<: *default database: myapp_production username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock
docker-compose.yml
docker
version: '3' services: db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: MYSQL_DATABASE: root MYSQL_ALLOW_EMPTY_PASSWORD: "yes" ports: - "3306:3306" volumes: - ./tmp/db:/var/lib/mysql 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
自分で調べたことや試したこと
調べたこと
- Dockerの環境でページが表示されるのは確認済み
- Docker内のMySQLにてmyapp_development, myapp_testを確認
mysql
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | myapp_development | | myapp_test | | mysql | | performance_schema | | root | | sys | +--------------------+ 7 rows in set (0.01 sec)
- EC2内のMySQLにてmyapp_productionを確認
mysql
mysql>show databases; +--------------------+ | Database | +--------------------+ | information_schema | | myapp_production | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)
試したこと
- database.ymlのproductionにhost: dbを追加
database.yml
略 production: <<: *default database: myapp_production host: db #ここを追加 username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock
develop,testに記述してあったため記述不足かと思い追加したが、
master failed to start, check stderr log for detailsと表示され、デプロイ自体ができなくなったため削除。
使っているツールのバージョンなど補足情報
バージョン
macOS Monterey 12.3.1
mysql Ver 8.0.28
unicorn-5.4.1
補足
- Gemfile
source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.7.5' gem 'rails', '~> 6.1.5' gem 'mysql2', '~>0.5.3' gem 'puma', '~> 5.0' gem 'sass-rails', '>= 6' gem 'webpacker', '~> 5.0' gem 'turbolinks', '~> 5' gem 'jbuilder', '~> 2.7' gem 'bootsnap', '>= 1.4.4', require: false group :development, :test do gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do gem 'web-console', '>= 4.1.0' gem 'rack-mini-profiler', '~> 2.0' gem 'listen', '~> 3.3' gem 'spring' gem 'rspec-rails' end group :production do gem 'unicorn', '5.4.1' end group :test do gem 'capybara', '>= 3.26' gem 'selenium-webdriver', '>= 4.0.0.rc1' gem 'webdrivers' gem 'rspec-rails' end gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
- MariaDBとMySQLの状況
MariaDB
$ sudo systemctl status mariadb Unit mariadb.service could not be found.
MySQL
sudo systemctl status mysqld ● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-04-20 23:09:18 UTC; 3h 30min ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 2911 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 2935 (mysqld) Status: "Server is operational" CGroup: /system.slice/mysqld.service └─2935 /usr/sbin/mysqld Apr 20 23:09:15 ip-172-31-2-166.ap-northeast-1.compute.internal systemd[1]: Starting MySQL Server... Apr 20 23:09:18 ip-172-31-2-166.ap-northeast-1.compute.internal systemd[1]: Started MySQL Server.
- このサイトを参考に作成したものをデプロイしようとしています。
docker-composeでRails 6×MySQLの開発環境を構築する方法
https://tmasuyama1114.com/docker-compose-rails6-mysql-development/
まだ回答がついていません
会員登録して回答してみよう