heroku.ymlを本番稼働中のアプリケーションに適用してみる
はじめに 以前、Herokuでheroku.ymlなるものが使えるようになったので試してみたのですが、個人開発でHeroku運用しているRailsアプリケーションにもheroku.ymlを導入してみたいと思いちょっと手を動かしてみました。 なお、heroku.ymlはまだdeveloper previewですのでご注意ください。 まずはreview appsで動作確認をしてみる ドキュメントに従ってProcfileを削除して、代わりにheroku.ymlを追加。 githubにpushしてreview appを作成します。 ただしheroku.ymlを導入する際の手順としてheroku stack:set containerを実行してstackの種類をcontainerにしておく必要があるのでreview appが立ち上がった後にこのコマンドを実行する必要があります。 review appが作成された後にstackをcontainerにします。 $ heroku stack:set container --app xxx-xxx-xxxx-pr-143 Stack set. Next release on ⬢ xxx-xxx-xxxx-pr-143 will use container. Run git push heroku master to create a new release on ⬢ xxx-xxx-xxxx-pr-143. 次のリリースからcontainerになるよと言っているので、このコマンドを実行することで再度stackを変えてアプリを作り直すみたいなことはありませんでした。安心。 再度review appにdeployするとheroku.ymlが有効になってDockerイメージのビルドが始まります。 === Fetching app code Sending build context to Docker daemon 569.9kBStep 1/16 : FROM heroku/heroku:16-build as build 16-build: Pulling from heroku/heroku 22dc81ace0ea: Pulling fs layer ... これでheroku.ymlを利用してreview appをデプロイできることが確認できました。 余談:環境変数の設定について ちなみに私のアプリケーションの場合、build中に環境変数を参照している箇所があったのでbuildがコケました。 そんなときはheroku.yml内のconfigに環境変数を設定するのですが、ドキュメント通りに書くとbuildが失敗します。 【追記】Herokuのドキュメントが間違っていたらしく、中の人にメールして直してもらいました。やはり環境変数は配列ではなくハッシュで指定するのが正しいようです。 最初にやってみたのは下記のような感じ。 build: languages: - ruby config: - AIRBRAKE_PROJECT_ID: 123456 ... すると下記のようなエラーが出ます。 === Fetching app code failed =!= Your heroku.yml isn't valid YAML. Try validating your YAML and fixing the errors: http://www.yamllint.com/ configの引数を配列ではなくハッシュにするとビルドが通りました。 build: languages: - ruby config: AIRBRAKE_PROJECT_ID: 123456 ... production環境に導入してみる 本番環境に導入したら更新します。 おわりに 実際に動いているアプリに導入してみようと思うとやっぱり色々ありますね。 ここで力尽きたので、本番に導入してみたらまた更新します。 ...