やまだです。
夏休みはいかがお過ごしでしたでしょうか。
本日はその夏休み中に勉強がてら遊んでいた際のことでも。
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.json
にpostinstall
を追加すればいいとのこと。
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
の順番で追加。
再度デプロイしdeploy logを確認すると無事に成功しました。