Rails
Node.js
Heroku

Heroku で Rails/webpacker のコンパイルに失敗する


何が起きたか

Heroku にデプロイした Rails アプリが webpacker.gemrake assets:precompile で失敗するようになった。こんなエラーが出る。

error upath@1.0.2: The engine "node" is incompatible with this module. Expected version ">=4 <=9". Got "10.14.1"

webpacker がどこかで依存している upath のバージョンが古く、 Node.js の 4.x から 9.x までのサポートしかなかったので失敗していた。


原因

Heroku で使われるデフォルトの Node.js が2019年に入って 8.x から 10.x になってたみたい。

Heroku Node.js Supportを見ると、以下のような記述があった。


If you don’t specify a version, the latest Long-Term-Support release will be used.


Heroku の Node は特にバージョンを指定しないと最新のLTSリリースを使うらしい。そこでNode.js Release Working Group の LTS(Long Time Support)スケジュールをチェックすると、以下の表があった。8.x系は2019年1月1日から Active LTS から Maintenance LTS になってる。


解決方法


  • デプロイしたい Rails アプリで yarn upgrade すれば upath のバージョンも上げてくれるので Node.js 10.x 系でも動くようになる。

  • もしくは Node.js のバージョンを固定する。こっちの方が安全かな。