heroku.ymlでRailsをデプロイする
Rails (API) + React.js (Web)を1つのレポジトリで作成し, RailsをHerokuに, React.jsをNetlifyにデプロイしたところ, Heroku周りで色々躓いたので備忘録がてら書こうと思います.
ディレクトリ構成
api
にRailsを, web
にReact.jsを置く形にしています.
ディレクトリを指定してHerokuにデプロイする
最初に躓いたのはここでした.
Getting Started on Heroku with Rails 5.xにあるように, Gemfile
がトップレベルにある形を取っていれば, Github integrationのみで簡単にデプロイできそうですが, その為にレポジトリを分けるのも癪だったので試行錯誤することになりました.
デプロイするパス (Gemfile
があるディレクトリ) を指定することはできないので, Building Docker Images with heroku.ymlにある, コンテナを自分で作る方法を取ることにしました.
Github integrationはこの方法でも使えるので, デプロイ方法を変更するだけです.
Rails用のDockerfileを作成する
Targeting a stage from a multi-stage buildを参考に以下のようなDockerfile
を作成します.
この時, CMD
を指定しないとunsupported
というエラーメッセージだけが残されてデプロイに失敗するので注意が必要です.
その他のHeroku独自の制約については, Dockerfile commands and runtimeに記載があります.
の部分は, sqlite3
or pg
のハンドリングをする為の指定を行なっています.
Specifying gems and groupsにあるようにconfigによるハンドリングを行なったところで設定が足りないのでこのコンテナではdevelopment
用のビルドができないので, ここで指定しています.
手元でdocker build
が通ることを確認したら, 次はheroku.yml
の作成です.
heroku.ymlで起動コマンドを指定する
RAILS_ENVを環境変数で設定します.
これでRelease Phase以降環境変数として利用できるので, 以下のように作成します.
(Build Phaseで参照したい場合は, Setting build-time environment variablesの方法を用いればできそうです)
ymlの構文エラーの場合に以下のようなエラーが出て, 時間を無為にするので注意が必要です. (無為にしました)
ドキュメントが散らばっていたり, エラーメッセージが分かりにくかったり (というより情報がない) で内容の割に苦労したので, 誰かしらの役に立てば幸いです.
記事が気に入ったらチップを送ることができます!
You can give me a cup of coffee :)
Kyash ID: soranoba
Amazon: Wish List
GitHub Sponsor: github.com/sponsors/soranoba
PayPal.Me: paypal.me/soranoba
(Updated: )