プログラミング初心者で勉強中の身ですが、ググってもなかなか情報が出なかったので報告します。
環境
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へのデプロイを試みたところ、
$ heroku rake db:migrate
を実行した時に
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を利用できるようにする
heroku stack:set heroku-18 -a <app name>
➁config/database.ymlに必要な記述が無かった
productionに以下のコードを追加
production:
url: <%= ENV['DATABASE_URL'] %>
##理由
きちんとした理由は随時募集しています。。誰か教えてください。。
➀heroku stackが heroku-20であった
heroku-20に変わることで出てきた、書くべき必要な処理が書けていなかった?
→これまでのheroku-18にすることでとりあえず解決
➁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'] %>
特に今回は後半の記述が大切で
# 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'] %>」
要はこの記述が無かったことで、どこのデータベースを使えばいいか分からずにエラーが出ていた。
##まとめ
何かおかしいことが起こり、ググっても分からないときは使っているもののバージョンを確認してみよう!
読んでいただきありがとうございました。