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環境に導入してみる 本番環境に導入したら更新します。 おわりに 実際に動いているアプリに導入してみようと思うとやっぱり色々ありますね。 ここで力尽きたので、本番に導入してみたらまた更新します。 ...

March 31, 2018 · Shun Sugai

CircleCI Tokyo User Meet-Upに行ってきた

CircleCI Tokyo User Meet-Upに行ってきたので、そこで見聞きしたことを簡単にお伝えしたいと思います。 Circle CIが2018年にリリースする大きめの機能3つ Protected Resources 権限管理を強化して、アカウントによってこの人はデプロイまでできるけど、この人は実行できないよ、みたいなのを実現する機能 従量課金制への移行 現状コンテナベースなので使っていないときも課金される 従量課金制に移行していく これはけっこううれしい Insightsをもっといい感じにするらしい 今は中途半端であまり応用がきかない データを活用できるようなプラットフォームを作る予定 私も現状ほぼ使っていない機能なのでどんな感じになるのか期待 その他 東京オフィスを開設する。 Hiring a local teamということで募集しているそうです GraphQLでAPIを作ろうとしている ユーザーに近い表側の部分はClojureで書かれているらしい 懇親会でCircle CIの裏側の話が聞けてとても楽しかったです。 ...

March 29, 2018 · Shun Sugai

heroku.ymlというのが出たらしいので雑に試してみた

はじめに Herokuでheroku.ymlなるものが使えるようになった(ただしdeveloper preview)ということなのでどんなものなのか調べつつ実際に試してみた。 heroku.ymlとは かなり推測まじりだが、要点をまとめると下記のような感じだろうか。 ...

March 27, 2018 · Shun Sugai

LighthouseをCircle CI上で雑に実行してみる

問題 GoogleのWebサイトパフォーマンス計測ツール、Lighthouseを定期的に実行したい。こんなときどうすれば良いだろうか? 解決策 Circle CIで実行する。 試してみた LighthouseはChromeのDevToolsだけでなくnode製のCLIもあるので今回はそちらを使う。 以下、.circleci/config.yml version: 2 jobs: build: docker: - image: circleci/node:8-browsers steps: - run: name: Install lighthouse command: | sudo npm install -g lighthouse - run: name: Check lighthouse command: | lighthouse --version - run: name: Run lighthouse command: | lighthouse https://blog.sugai.dev/ --save-assets - store_artifacts: path: '.' imageは特に吟味していないのだが、circleci製のnodeが入っているものを使った。余裕があれば後で中身を見てみたい。 sudo npm installしないとPermission deniedになるのでsudoをつける必要がある。 store_artifactsしておくことでCircle CIのページからlighthouseのreportを閲覧できて便利だ。 “Artifacts"というタブにreportが保存されている。 一番下の”*.report.html"というファイルを開くとレポートが見れる。 定期的に実行するにはWorkflowのスケジュール機能を使えば良いと思う。 毎回雑なのでいつか丁寧に試してみたいものである。 参考 https://developers.google.com/web/tools/lighthouse/ https://discuss.circleci.com/t/globally-installed-node-module-yields-eacess-permission-denied/13608 https://hub.docker.com/r/circleci/node/tags/ ...

March 21, 2018 · Shun Sugai

ローカルでcircleciコマンドを実行する時に環境変数を渡す方法

問題 ローカル環境でcircleciコマンドを実行するときに、環境変数を渡したいことがあると思う。こんなときどうすれば良いだろうか? 解決策 circleci build --env VAR=VAL 以上。 ...

February 7, 2018 · Shun Sugai

Serverless FrameworkでGoを使いつつCircle CIでデプロイしてみる

はじめに AWS LambdaでGolangが使えるようになったなあと思っていたら早速Serverless FrameworkでもGoが使えるようになっていた。 下記の公式ブログにサンプルがあるので、そのまま試してみた。 Serverless Framework example for Golang and Lambda ...

February 5, 2018 · Shun Sugai

逆引きCircle CI 2.0

はじめに Circle CI 2.0で「特定のブランチでのみjobを実行したい場合ってどうするんだっけ?」というのを調べるためにConfiguration Referenceを読んでみました。 ここを読めばだいたいわかるのですが、やりたいことベースでまとまっているほうがわかりやすいので自分のために逆引き的に整理していこうと思います。以下、随時追記していく予定です。 ...

January 10, 2018 · Shun Sugai

Dockerでbundle installしたときにinvalid byte sequence in US-ASCII (ArgumentError)が出る場合の対処法

問題 Dockerで作ったRuby環境でbundle installしたときにinvalid byte sequence in US-ASCII (ArgumentError)というエラーが出た。 ...

January 7, 2018 · Shun Sugai