問題
Heroku に Rails バックエンドと webpacker + webpack 使って JavaScript のコンパイルを行うフロントエンドをもつWebアプリをデプロイしようとしたら以下のエラー。
error some-rails-app-build@0.1.0: The engine "node" is incompatible with this module. Expected version "10.16.0". Got "10.15.3"
error Found incompatible module.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
Node.js のバージョンが 10.16.0 で指定されてるけど 10.15.3 でビルドしようとしている。 package.json では以下のようにNode.jsのバージョンを指定している。
...
"engines": {
"node": "10.16.0"
}
...
原因と解決方法
原因は buildpacks の順番。 heroku/ruby
にはすでに Node.js 10.15.3 がインストールされており、 heroku/nodejs
を buildpack として追加していても heroku/ruby
が上にあるとそちらの Node.js が使われる。
If you need a specific version of node for your Ruby application you should use multiple buildpacks to first install node then install Ruby.
Ruby とバージョン指定した Node.js を使いたかったら最初に Node.js をインストールしろと。
Verify that your buildpacks are set correctly and that Node comes before Ruby:
Node.js を Ruby より前にすることを注意している。
上記2つはHeroku Ruby Supportより引用。
heroku/ruby
を heroku/nodejs
の下に変えたらうまくいきました。