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

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

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

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

MySQL

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

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

Q&A

解決済

2回答

3102閲覧

heroku run db:migrateをするとMysql2::Error::ConnectionError: Unknown MySQL server host 'db' (25)を返される

zyno

総合スコア41

Ruby

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

MySQL

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

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

0グッド

0クリップ

投稿2020/09/09 15:59

編集2020/09/09 16:03

前提・実現したいこと

heroku run db:migrateを通したい

本番環境(heroku)でdbを用いるサイトへ遷移したい。

発生している問題・エラーメッセージ

rails aborted! Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (25) /app/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect' /app/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/mysql2_adapter.rb:22:in `new' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/mysql2_adapter.rb:22:in `mysql2_connection' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:830:in `new_connection' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:874:in `checkout_new_connection' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:853:in `try_to_checkout_new_connection' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:814:in `acquire_connection' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:538:in `checkout' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:382:in `connection' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:1033:in `retrieve_connection' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_handling.rb:118:in `retrieve_connection' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_handling.rb:90:in `connection' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/tasks/database_tasks.rb:172:in `migrate' /app/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/railties/databases.rake:60:in `block (2 levels) in <main>' /app/vendor/bundle/ruby/2.6.0/gems/railties-5.2.4.3/lib/rails/commands/rake/rake_command.rb:23:in `block in perform' /app/vendor/bundle/ruby/2.6.0/gems/railties-5.2.4.3/lib/rails/commands/rake/rake_command.rb:20:in `perform' /app/vendor/bundle/ruby/2.6.0/gems/railties-5.2.4.3/lib/rails/command.rb:48:in `invoke' /app/vendor/bundle/ruby/2.6.0/gems/railties-5.2.4.3/lib/rails/commands.rb:18:in `<main>' /app/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require' /app/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi' /app/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register' /app/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi' /app/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require' /app/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/dependencies.rb:291:in `block in require' /app/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/dependencies.rb:257:in `load_dependency' /app/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/dependencies.rb:291:in `require' /app/bin/rails:4:in `<main>' Tasks: TOP => db:migrate (See full trace by running task with --trace)

該当のソースコード

config/database.yml

config/database.yml

1# MySQL. Versions 5.1.10 and up are supported. 2# 3# Install the MySQL driver 4# gem install mysql2 5# 6# Ensure the MySQL gem is defined in your Gemfile 7# gem 'mysql2' 8# 9# And be sure to use new-style password hashing: 10# https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html 11# 12default: &default 13 adapter: mysql2 14 encoding: utf8 15 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 16 username: root 17 password: <%= ENV['MYSQL_ROOT_PASSWORD'] %> 18 host: db 19 20development: 21 <<: *default 22 database: app_development 23 24# Warning: The database defined as "test" will be erased and 25# re-generated from your development database when you run "rake". 26# Do not set this db to the same as development or production. 27test: 28 <<: *default 29 database: app_test 30 31# As with config/secrets.yml, you never want to store sensitive information, 32# like your database password, in your source code. If your source code is 33# ever seen by anyone, they now have access to your database. 34# 35# Instead, provide the password as a unix environment variable when you boot 36# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database 37# for a full rundown on how to provide these environment variables in a 38# production deployment. 39# 40# On Heroku and other platform providers, you may have a full connection URL 41# available as an environment variable. For example: 42# 43# DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase" 44# 45# You can use this database configuration with: 46# 47# production: 48# url: <%= ENV['DATABASE_URL'] %> 49# 50production: 51 <<: *default 52 database: app_production 53 username: app 54 password: <%= ENV['APP_DATABASE_PASSWORD'] %>

docker-compose.yml

docker

1version: "2" 2services: 3 app: 4 build: 5 context: . 6 dockerfile: ./docker/rails/Dockerfile 7 # command: bundle exec unicorn -p 3000 -c /app/config/unicorn.rb 8 command: bundle exec rails s -p 3000 -b '0.0.0.0' 9 ports: 10 - "3000:3000" 11 volumes: 12 - /var/tmp 13 - .:/app 14 depends_on: 15 - db 16 extends: 17 file: ./docker/mysql/password.yml 18 service: password 19 20 db: 21 build: 22 context: . 23 dockerfile: ./docker/mysql/Dockerfile 24 ports: 25 - "3306:3306" 26 volumes: 27 - db_data:/var/lib/mysql 28 extends: 29 file: ./docker/mysql/password.yml 30 service: password 31 32 nginx: 33 build: 34 context: . 35 dockerfile: ./docker/nginx/Dockerfile 36 ports: 37 - "80:80" 38 volumes_from: 39 - app 40 41volumes: 42 db_data: 43

試したこと

  1. database.ymlhost: dbhost: localhostに変える系

https://teratail.com/questions/244445
https://www.tutorialfor.com/questions-79268.htm
→変化なし
2. heroku logs -t で本番環境のログを出力
サインアップ、ログインページにいくとMysql2::Error::ConnectionError (Unknown MySQL server host 'db' (0)):を吐かれる

補足情報(FW/ツールのバージョンなど)

docker
mysql
ruby '2.6.3'
rails '5.2.3'

  1. 開発環境で動くのに、本番環境で動かない。
  2. ページはトップページとログインページとサインアップページのみ。
  3. ログインにdeviseを使用しており、本番環境でログインとサインアップのページを遷移する際に動かなくなる。
  4. deviseではtwitterのOAuth認証も追加しており、APIキーが外部から見えないようにgem 'dotenv-rails'を使っている。APIキーを記した.envファイルは.gitignoreで隠蔽をしている。最初はAPI-KEYが本番環境に反映されていないのが原因だと考えていたが、heroku config:set ~~~で本番環境にもAPI-KEYを反映させているので、その線よりはエラーの名称からしてdatabase.ymldocker-compose.ymlの設定を疑う方がベターだと考えた。しかし、どこが悪いのか見当もつかない。
  5. herokuはデフォルトでmysqlをサポートしていない。しかし、herokuにheroku addons:create cleardb:igniteでcleardbを追加しているため、mysqlだから動かないというわけでもない。

分かる方いたらご教授頂けると幸いです。

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

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

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

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

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

guest

回答2

0

1. clearDBのセットアップ

ClearDB MySQL

clearDBに接続するためにherokuに環境変数を渡す必要があります。こちらはセットアップしましたか?

2. database.ymlの変更

host: db指定しているdbはdocker-composeで立ち上げたdbを指しています。
デプロイ先ではclearDBを用いるためhost: dbではなく、clearDBに接続する値に変更する必要があります。
hostを環境変数などで変更できるようにすると良いかと思います。
また、1番を行ったら環境変数で渡さなくても、herokuが勝手につないでくれるかもしれないです。

投稿2020/09/09 16:53

編集2020/09/09 16:54
necocoa

総合スコア209

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

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

0

ベストアンサー

念のため実行コマンドを rake または rails 越しに実行してみるとどうでしょうか:

console

1heroku run rake db:migrate

参考: Migrate your database | Getting Started on Heroku with Rails 5.x | Heroku Dev Center

また、データベース接続を環境変数 DATABASE_URL で設定していますか?

参考: Configuring connections in Rails 4.1+ | Rails Database Connection Behavior | Heroku Dev Center

また、上記の記事より、
Rails の database.yml の設定で、Heroku 向けの環境に該当する
次の項目は設定することができません。

  • adapter
  • database
  • username
  • password
  • host
  • port

上記の記事では、次のような、Heroku 向けの環境に該当する項目の設定例が提示されています

yaml

1production: 2 encoding: utf8 3 pool: 15

Clear DB を使う場合は、次の方法で DATABASE_URL を設定します:
ClearDB MySQL | Heroku Dev Center

console

1$ heroku config | grep CLEARDB_DATABASE_URL 2CLEARDB_DATABASE_URL => mysql://adffdadf2341:adf4234@us-cdbr-east.cleardb.com/heroku_db?reconnect=true 3$ heroku config:set DATABASE_URL='mysql://adffdadf2341:adf4234@us-cdbr-east.cleardb.com/heroku_db?reconnect=true' 4Adding config vars: 5DATABASE_URL => mysql2://adffd...b?reconnect=true 6Restarting app... done, v61.

また、Clear DB と Rails の場合の公式な手順が次の記事に示されています
Connecting to ClearDB from Heroku using Ruby on Rails on Cedar – ClearDB

投稿2020/09/09 16:42

編集2020/09/09 17:02
y_shinoda

総合スコア3272

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問