質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

0回答

901閲覧

Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (2)

tomsuma

総合スコア38

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2020/09/09 09:12

編集2020/09/10 00:05

unicornをつかい、
bundle exec cap production deploy
コマンドでアプリをデプロイしようとしたところ

Tasks: TOP => deploy:migrate (See full trace by running task with --trace) The deploy has failed with an error: Exception while executing as ec2-user@54.249.219.192: Exception while executing as ec2-user@54.249.219.192: rake exit status: 1 rake stdout: Nothing written rake stderr: DEPRECATION WARNING: Including LoggerSilence is deprecated and will be removed in Rails 6.1. Please use `ActiveSupport::LoggerSilence` instead (called from block (2 levels) in require at /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/runtime.rb:74) rake aborted! Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (2) /var/www/Books/shared/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect' /var/www/Books/shared/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize' ** DEPLOY FAILED ** Refer to log/capistrano.log for details. Here are the last 20 lines:

のエラーが出、
capistrano.logでも同じエラーが確認されました。

このエラーについて調べたところ、
Dockerが関係しているとのことですが、

db_1 | 2020-09-09 09:07:19 1 [Note] RSA private key file not found: /var/lib/mysql//private_key.pem. Some authentication plugins will not work. db_1 | 2020-09-09 09:07:19 1 [Note] RSA public key file not found: /var/lib/mysql//public_key.pem. Some authentication plugins will not work. db_1 | 2020-09-09 09:07:19 1 [Note] Server hostname (bind-address): '*'; port: 3306

この小さなエラー?を除き
docker composed up で問題なくローカルホストが開けます

unicorn

1app_path = File.expand_path('../../../', __FILE__) 2 3#アプリケーションサーバの性能を決定する 4worker_processes 1 5 6# 「current」を指定 7working_directory "#{app_path}/current" 8 9# 「shared」の中を参照するよう変更 10listen "#{app_path}/shared/tmp/sockets/unicorn.sock" 11 12# 「shared」の中を参照するよう変更 13pid "#{app_path}/shared/tmp/pids/unicorn.pid" 14 15# 「shared」の中を参照するよう変更 16stderr_path "#{app_path}/shared/log/unicorn.stderr.log" 17 18# 「shared」の中を参照するよう変更 19stdout_path "#{app_path}/shared/log/unicorn.stdout.log" 20 21#Railsアプリケーションの応答を待つ上限時間を設定 22timeout 60 23 24#以下は応用的な設定なので説明は割愛 25 26preload_app true 27GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true 28 29check_client_connection false 30 31run_once = true 32 33before_fork do |server, worker| 34 defined?(ActiveRecord::Base) && 35 ActiveRecord::Base.connection.disconnect! 36 37 if run_once 38 run_once = false # prevent from firing again 39 end 40 41 old_pid = "#{server.config[:pid]}.oldbin" 42 if File.exist?(old_pid) && server.pid != old_pid 43 begin 44 sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU 45 Process.kill(sig, File.read(old_pid).to_i) 46 rescue Errno::ENOENT, Errno::ESRCH => e 47 logger.error e 48 end 49 end 50end 51 52after_fork do |_server, _worker| 53 defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection 54end

deploy

1# capistranoのバージョンを記載。固定のバージョンを利用し続け、バージョン変更によるトラブルを防止する 2lock '3.14.1' 3 4# Capistranoのログの表示に利用する 5set :application, 'Books' 6 7# どのリポジトリからアプリをpullするかを指定する 8set :repo_url, 'git@github.com:shunichfukui/Books.git' 9 10# バージョンが変わっても共通で参照するディレクトリを指定 11set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads') 12 13set :rbenv_type, :user 14set :rbenv_ruby, '2.6.5' #カリキュラム通りに進めた場合、’2.6.5’ です 15 16# どの公開鍵を利用してデプロイするか 17set :ssh_options, auth_methods: ['publickey'], 18 keys: ['~/.ssh/35783578a.pem'] 19 20# プロセス番号を記載したファイルの場所 21set :unicorn_pid, -> { "#{shared_path}/tmp/pids/unicorn.pid" } 22 23# Unicornの設定ファイルの場所 24set :unicorn_config_path, -> { "#{current_path}/config/unicorn.rb" } 25set :keep_releases, 5 26 27# デプロイ処理が終わった後、Unicornを再起動するための記述 28after 'deploy:publishing', 'deploy:restart' 29namespace :deploy do 30 task :restart do 31 invoke 'unicorn:restart' 32 end 33end

dockercompose

1version: '3' 2services: 3 db: 4 image: mysql:5.6 #既存アプリとあわせる。ターミナルに「mysqladmin version」で確認 5 environment: 6 MYSQL_ROOT_PASSWORD: example 7 MYSQL_DATABASE: root 8 ports: 9 - "4306:3306" #Sequel ProでDBを確認する為、4306としておく 10 volumes: 11 - mysql-data:/var/lib/mysql 12 web: 13 build: . 14 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 15 volumes: 16 - .:/Books 17 ports: 18 - 3000:3000 19 depends_on: 20 - db 21 tty: true 22 stdin_open: true 23volumes: 24 mysql-data:

dockerfile

1 2FROM ruby:2.6 3 4# APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn 5 6RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ 7 && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list 8 9RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs yarn 10 11WORKDIR /Books/ 12COPY Gemfile ./Gemfile 13COPY Gemfile.lock ./Gemfile.lock 14RUN gem install bundler 15RUN bundle install 16COPY . /Books/ 17 18# Add a script to be executed every time the container starts. 19COPY entrypoint.sh /usr/bin/ 20RUN chmod +x /usr/bin/entrypoint.sh 21ENTRYPOINT ["entrypoint.sh"] 22EXPOSE 3000 23 24# Start the main process. 25CMD ["rails", "server", "-b", "0.0.0.0"]

database

1 2 3default: &default 4 adapter: mysql2 5 encoding: utf8 6 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 7 username: root 8 password: example 9 # socket: /tmp/mysql.sock 10 11 host: db 12 13development: 14 <<: *default 15 database: Books_development 16 17test: 18 <<: *default 19 database: Books_test 20 21production: 22 <<: *default 23 database: Books_production 24 25 username: root 26 password: <%= ENV['DATABASE_PASSWORD'] %> 27 socket: /var/lib/mysql/mysql.sock 28

どこか怪しい所があればご指摘お願いします。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unhappychoice

2020/09/09 14:14 編集

本番のデータベースの構成はどのような形でしょうか ローカルで docker-compose を利用していても、普通本番環境ではデータベースをアプリのサーバーとは別に立てて、そのホストに接続する形となる気がします。 (今回のエラーは、 db というホストの MySQL サーバーが見つからない、というエラーなので (つまりは database.yml に本番環境の MySQL 設定を正しく書けば、動くはずです
tomsuma

2020/09/10 00:25 編集

おはようございます ご回答ありがとうございます database.ymlを追加させてもらいました どこか怪しいところはございますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問