athome-developer’s blog

不動産情報サービスのアットホームの開発者が発信するブログ

Herokuで動かしているRubyアプリでbower installしてgulpでbuild

やまだです。
夏休みはいかがお過ごしでしたでしょうか。
本日はその夏休み中に勉強がてら遊んでいた際のことでも。

TL;DR;

課題

異なる言語ごとのデプロイをしたい。

本体はRubyなのでbunldle installでOKだけど、
bowerとかgulpとかNode.jsの方も自動でやりたい。

対応

  • package.json"scripts"に下記を追加することでnpm install後に実行される
    • "postinstall": "bower install && gulp"
  • Buildpacksを下記の順番で設定
    • heroku/nodejs
    • heroku/ruby
  • Herokuでdeploy

くわしく

Herokuで動かしているRuby(Sinatra)のWebアプリがあり、そこでBootstrapなどを使っているわけです。
面倒なのでCDNとか使ってたんですが、ちょうど最近の業務で携わっているシステムでbowerやgulpも使っているんで、 勉強がてら導入してみました。

ローカルでの作業はひと段落して
「いやー、やっぱbowerとかgulpとか便利だねー」
と、ドヤ顔してたんですが、んじゃデプロイするか、となった際に
「はて、どうやってbower installとかgulp( default)を実行するのだろう」
と、困った。

postinstallを設定する

調べてみるとNode.js使ってる例ではpackage.jsonpostinstallを追加すればいいとのこと。

package.jsonへ追加し、まずはローカルでnpm installしてみたら 確かにbower installからgulp( default)の実行まで一気に実行できた。

なにこれ、超便利。

Buildpacksを設定する

が、まだローカルでの話で、結局Herokuでnpm installはどうやってやるのかな?とさらにググって下記の記事にたどり着く。

結構、単純…。

リンク先コマンドで設定しているけれどWebからも「Settings」に「Buildpacks」がある。
(「heroku/ruby」が設定済みの状態)

まずは単純に「heroku/nodejs」を追加してみたけど、先にRubyが実行されてしまうため失敗。
Webでは--index 1みたいなことはできなそうなので、一度「heroku/ruby」は削除し、

  • heroku/nodejs
  • heroku/ruby

の順番で追加。

f:id:ky04968:20160831112215p:plain

再度デプロイしdeploy logを確認すると無事に成功しました。