Edited at

enebularのHerokuボタンからアプリがビルド・デプロイできないを解決


【追記】2018/11/12

この記事を投稿したのが2018/11/08だったのですが、

その日のうちに修正されたようです。(対応が早い!)

GitHubでThank You @pokiiio, @TakedaHiromasaとメンション飛ばされてました。嬉しい。

ということで公式ドキュメントの手順通りenebularのHerokuボタンからデプロイできます。

修正されましたが、もしいつかenebularに限らず同じエラーで困る人が出た時のためにこの記事は残しておきます。


こんにちは、たいしょーです。

急にenebularのHerokuボタンからアプリをビルド・デプロイできなくなったのでその原因と解決っぽいものを書きます。

とにかくビルド・デプロイしたい!!という人は下記のHerokuボタンを押してください。

Heroku Deploy


はじめに

enebularは近々ソフトウェアアップデートを行うようです。

なので、もしかしたらそこでこの問題は解決されるかもしれませんが、それまでの間の一時的なつなぎとしてこの記事を参照していただければと思います。


enebularのHerokuボタン

下記の公式ドキュメントにもある通り、enebularは作成したフローをHerokuで作成したenebular Node-REDにDeployする機能があります。


Heroku へのデプロイ

https://docs.enebular.com/ja/Deploy/DeployFlow/Heroku/


まずこのドキュメント通り進めていって、プロジェクトのDeploy設定のDeploy to Herokuボタンを押すとHerokuにenebularのアプリが作成できます。


突然ビルドできなくなった

先週(10/31)までここのHerokuボタンからビルドできていたのに先日(11/5~6)急にビルドできなくなりました・・・

loveheroku.png

※急に「Love, Heroku」が表示されるように...

もともとNode.jsやHerokuには全然詳しくないんですが、(Herokuに至っては先日初めたばかり)このままアプリが作れないのも困るのでなんとか解決します。


原因調査


ビルドログ

上記のビルド失敗ログ(LoveHerokuログ)を見た感じ、「Node version not specified in package.json」とあるようにNodeのバージョンあたりがおかしいようです。

と、いうことでビルドが成功していた頃のビルドログと、失敗した時のビルドログを比べてみました。

成功
失敗

成功
失敗

明らかにNodeのバージョンが変わってます。

バージョンが変わったせいでパッケージの依存関係がうまく構築できず「Love,Heroku」したのでしょうか・・・?


HerokuのNode.jsサポートについて

上記のログにもある通り、enebularアプリのビルドではNode.jsやnpmのバージョンは明示的に指定しておらず、Herokuのデフォルトに従っているようです。

「LoveHerokuログ」でもpackage.jsonでNodeのバージョン指定しろと言っています。

もう解決策は目に見えてますが、「一週間前までは8.xだったじゃん!! なんで今日から10.xになったん!!!」と理不尽な怒りを抑えるためにHeroku Dev Centerで調べてみると、Node.jsのサポートについて説明されていました。


Heroku Node.js Support

https://devcenter.heroku.com/articles/nodejs-support


その中の・・・



こ、これだー!!!

ちょうどビルド成功時と失敗時の間がactive LTSの切り替わり時期だったようです。運が悪いですね・・・


修正・解決


どうする?

さて、解決方法としてはうまくビルドできていた頃のNode.jsのバージョンでビルドするように指定すればいいことが見えてきました。

で、どう修正するかなんですが、色々総当たりで試行錯誤した結果、

enebular/enebular-agent-herokuリポジトリ0.18.Xブランチでnode:8.12.0を指定するとある程度安定して動きそうでした。(npmはデフォルト6.4.1)

enebular公式ドキュメントにもあったプロジェクトDeploy設定のHerokuボタンはev2ブランチに繋がっているのでこのブランチはまだサポート外なのかもしれませんがお許しください・・・

(ev2ブランチはnodeのバージョン指定を色々試してもうまく動かなかった)


修正

Herokuボタンの仕組みは、Herokuボタンが押されるとそれに紐づけられたコードリポジトリ(GitHubとかの)を読みにいきます。

リポジトリにはアプリをどうやってビルドするかのいわゆるMakefile的な情報が書かれていてそれを元にHerokuはビルド・デプロイを行うらしいです。

と、いうことでコードリポジトリを修正しました!


/TakedaHiromasa/enebular-agent-heroku/tree/0.18.X


そして修正したHerokuボタンです。好きなだけ押してください。

Heroku Deploy

以上、みなさん良きenebular&Herokuライフを!