何が起きたか
Heroku にデプロイした Rails アプリが webpacker.gem の rake 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 のバージョンを固定する。
長期的には前者、短期的には後者の方法が安全かな。