LoginSignup
9
5

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-15

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

環境

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'] %>」

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

まとめ

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

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

9
5
0

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
  3. You can use dark theme
What you can do with signing up
9
5