search
LoginSignup
5

More than 1 year has passed since last update.

posted at

updated at

heroku rake db:migrateでエラーが出た時の対処

プログラミング初心者で勉強中の身ですが、ググってもなかなか情報が出なかったので報告します。

環境

Mac OS X
Ruby: 2.7.1
Rails: 6.0.3.4
heroku stack: heroku-20(エラーが出た時)
DB: MYSQL

起こったこと

https://qiita.com/murakami-mm/items/9587e21fc0ed57c803d0
こちらの記事を参考にherokuへのデプロイを試みたところ、

console
$ heroku rake db:migrate

を実行した時に

console
Mysql2::Error::ConnectionError: SSL connection error: error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol

とエラーが出た。

原因・対処

原因

自身の環境でこのエラーが起きた原因は二つ

➀heroku stackが heroku-20であった
➁config/database.ymlに必要な記述が無かった

対処

➀heroku stackが heroku-20であった
→heroku-18を利用できるようにする

console
heroku stack:set heroku-18 -a <app name>

➁config/database.ymlに必要な記述が無かった
productionに以下のコードを追加

config/database.yml
production:
  url: <%= ENV['DATABASE_URL'] %>

理由

きちんとした理由は随時募集しています。。誰か教えてください。。

➀heroku stackが heroku-20であった
 heroku-20に変わることで出てきた、書くべき必要な処理が書けていなかった?
 →これまでのheroku-18にすることでとりあえず解決

➁config/database.ymlに必要な記述が無かった

config/database.ymlにはこんな記述があるらしいです(自分は何故か消えていた)

config/database.yml

# As with config/credentials.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password as a unix environment variable when you boot
# the app. Read https://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full rundown on how to provide these environment variables in a
# production deployment.
#
# On Heroku and other platform providers, you may have a full connection URL
# available as an environment variable. For example:
#
#   DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
#
# You can use this database configuration with:
#
#   production:
#     url: <%= ENV['DATABASE_URL'] %>

特に今回は後半の記述が大切で

config/database.yml
# On Heroku and other platform providers, you may have a full connection URL
# available as an environment variable. For example:
#
#   DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
#
# You can use this database configuration with:
#
#   production:
#     url: <%= ENV['DATABASE_URL'] %>

雑に和訳すると

「Herokuや他のプラットフォーム上で、あなたは環境変数の形で様々なURLをもらえるでしょう。こんなかんじで:
DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
あなたはこのデータ構成をこのように使えます
production:
url: <%= ENV['DATABASE_URL'] %>」

要はこの記述が無かったことで、どこのデータベースを使えばいいか分からずにエラーが出ていた。

まとめ

何かおかしいことが起こり、ググっても分からないときは使っているもののバージョンを確認してみよう!

読んでいただきありがとうございました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5