理解が浅く、間違った部分があったり、強引な方法になっている可能性もあるのでご了承ください。
また、アドバイス等あれば是非ご教示いただければ幸いです。
##状況
Dockerで構築されたRailsのサービスをherokuへデプロイする際に、
Dockerのコンテナ内から、$ git push heroku master
とデプロイを行おうとしても、以下のエラーが出て進めませんでした。
Mysql2::Error::ConnectionError (Unknown MySQL server host 'db' (0))
他の方の記事で解決方法になっているようなことを行っていても、エラー内容が変わらず解決しなかったです。
いくつかの記事を見ていくうちに、Dockerコンテナからではなくローカルで操作しているのではないかと思い、ローカルから行うことにしました、
(もしかしたらDockerのコンテナからでもできるのかもしれないです。)
Herokuをターミナルから操作できるように
ターミナルからherokuで使うコマンドを入力してもheroku: command not found
とメッセージが帰ってくるため、
まずは、Herokuをターミナルから操作するためのコマンドツールをインストールしました。
$ brew install heroku/brew/heroku
その後は、こちらの記事を参考に、進めていったのですが、
DBセットアップのところでつまずきました。
詳しくはこちらの記事にまとめていますので、参考にしてみてください。
PG::UndefinedTable: ERROR: table " " does not existとでて、マイグレーションできない
##pushできない
$ git push heroku master
とデプロイをしようとしても、Everything up-to-date
と返ってきて、デプロイができない。
作業しているブランチ名を指定しないといけなかった。
(masterにマージしてから行えば、$ git push heroku master
でできるかと思います。)
$ git push heroku ブランチ名:master
また、上の$ git push heroku ブランチ名:master
を実行後に、以下のエラーが出てきました。
ここは、エラーに書かれているheroku stack:set heroku-18
を実行すると解決できました。
(heroku-18がデフォルトだそうなんですが、アップグレードしないといけませんでした。)
公式のHeroku-Stacks
remote: =!= Your app does not include a heroku.yml build manifest. To deploy your app, either create a heroku.yml: https://devcenter.heroku.com/articles/build-docker-images-heroku-yml
remote: Or change your stack by running: 'heroku stack:set heroku-18'
remote: Verifying deploy...
remote:
remote: ! Push rejected to サービス名.
remote:
To https://git.heroku.com/サービス名.git
! [remote rejected] ブランチ名 -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/サービス名.git'
$ heroku stack:set heroku-18
Setting stack to heroku-18... done
これで、エラーを解消でき、再び入力するとデプロイが完成しました。
$ git push heroku ブランチ名:master
##参考記事
・Heroku CLIの導入と初期設定
・Heroku公式
・DockerでRailsの環境構築してHerokuへデプロイする
・【Docker】Rails圧倒的環境構築&Herokuへ簡単デプロイ
・Heroku - git push heroku masterするとEverything up-to-dateとなる
・【初心者向け】railsアプリをherokuを使って確実にデプロイする方法【決定版】