docker-compose上でrailsとmysqlを使ったwebアプリケーションをherokuを利用してデプロイする時にはまったエラーへのアプローチを忘れないための備忘録。
なお、heroku はターミナル からの操作ではなく、heroku のwebサイト上で操作する。
エラーではsocketである'/tmp/mysql.sock'が見つからないと言われているが、明らかに存在しているし、gitignoreにも入ってはいない。
念のため、rails側でのデータベースの設定として、これが必須かは分からないが、下記のsocket:の部分を追記した。
database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
host: localhost
socket: /tmp/mysql.sock ←ここ
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
username: myapp
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
だとしたら、heroku側での設定が間違えていると思いdbと接続するのに必要なherokuの環境変数をいじってみることにする。
これにいいヒントをくれたのが
https://xyk.hatenablog.com/entry/2014/09/29/184727
の記事である。
ただし、今回はターミナル上からではなく、herokuのwebサイト上から操作する必要がある。ターミナルからの操作もやってしまってめちゃくちゃになってしまったので、ここで闇雲に記事通りに進めればいいということでもないと学んだ、、、
まず、herokuのwebサイト上からそもそもcleardbのダウンロード、インストールをしなければいけない。
これは、herokuのサイト上のResourcesのadd-onsから探してあげれば良い。
次に上記画像のcleardb_database_url と database_url(多分最初はないから作る) の部分をそれぞれ自分の場合 mysql2 を使用しているのでそのように変更する。valuesの部分はcleardb_database_urlの場合はadd-onでインストールした時に自動的にできている。database_urlの場合はcleardb_database_urlのものをコピペしてあげれば良い。
これでできた。