Search code examples
node.jsherokuyarnpkgruby-on-rails-6precompile

Deploy to Heroku failed. move-file incompatible with node version


I am struggling to deploy a new rails 6 app to heroku. It runs fine on my local. During the deployment process I receive the following output.

Unfortunately, I am new to webpack and yarn. It seems like a version / dependency issue with move-file which in turn seems to be a dependency for webpacker. However, I have no idea how to resolve this.

It seems to come down to this line:

error [email protected]: The engine "node" is incompatible with this module. Expected version ">=10.17". Got "10.15.3"

However, node is not one of my node-modules but seems to be an installed binary. When I run

node - v

I get: v12.16.1

Any help would be greatly appreciated.

remote:        Removing bundler (2.0.2)
remote:        Bundle completed (201.39s)
remote:        Cleaning up the bundler cache.
remote: -----> Installing node-v10.15.3-linux-x64
remote: -----> Installing yarn-v1.16.0
remote: -----> Detecting rake tasks
remote: -----> Preparing app for Rails asset pipeline
remote:        Running: rake assets:precompile
remote:        yarn install v1.16.0
remote:        [1/4] Resolving packages...
remote:        [2/4] Fetching packages...
remote:        info [email protected]: The platform "linux" is incompatible with this module.
remote:        info "[email protected]" is an optional dependency and failed compatibility check. Excluding it from installation.
remote:        error [email protected]: The engine "node" is incompatible with this module. Expected version ">=10.17". Got "10.15.3"
remote:        error Found incompatible module.
remote:        info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
remote: 
remote:  !
remote:  !     Precompiling assets failed.
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote: 
remote:  !     Push failed

If you need any further log or code samples, please let me know. I am at a loss.

===================== update:

I found the documentation about buildpacks and node on heroku: - https://devcenter.heroku.com/articles/nodejs-support

based on that, I changed my package.json file to look like this:

  },
  "version": "0.1.0",
  "engines": {
    "node": "12.16.x"
  },
  "devDependencies": {
    "webpack-dev-server": "^3.10.3"
  }

now, the error message has changed to:

remote:        Running: rake assets:precompile
remote:        yarn install v1.16.0
remote:        [1/5] Validating package.json...
remote:        error [email protected]: The engine "node" is incompatible with this module. Expected version "12.16.x". Got "10.15.3"
remote:        error Found incompatible module.
remote:        info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
remote: 
remote:  !
remote:  !     Precompiling assets failed.
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote: 
remote:  !     Push failed

I assumed the update in the package.json file would cause heroku to use the specified node version. However, it doesn't.

The question is: How can I define which node version heroku uses?


Solution

  • It took some research to solve this. Heroku can apply multiple build packs per app. In that case, the order matters. I specified to run the nodejs buidlpack first and then the ruby buildpack. Only then will the "engine" definition in the package.json have an effect. If you use the ruby buildpack, the node version defaults to 10.15.3. However, if you execute the nodejs buildpack first, it will install the version specified in the package.json file. https://devcenter.heroku.com/articles/ruby-support#installed-binaries