部署到 Heroku 失败。移动文件与节点版本不兼容
Deploy to Heroku failed. move-file incompatible with node version
我正在努力将新的 rails 6 应用程序部署到 heroku。它 运行 在我本地没问题。在部署过程中,我收到以下输出。
不幸的是,我是 webpack 和 yarn 的新手。这似乎是 move-file 的版本/依赖性问题,而 move-file 又似乎是 webpacker 的依赖性。但是,我不知道如何解决这个问题。
似乎归结为这一行:
error move-file@2.0.0: The engine "node" is incompatible with this module. Expected version ">=10.17". Got "10.15.3"
但是,节点不是我的节点模块之一,但似乎是已安装的二进制文件。当我 运行
node - v
我得到:v12.16.1
如有任何帮助,我们将不胜感激。
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 fsevents@1.2.13: The platform "linux" is incompatible with this module.
remote: info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation.
remote: error move-file@2.0.0: 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
如果您需要任何进一步的日志或代码示例,请告诉我。我很茫然。
=====================
更新:
我在 heroku 上找到了关于 buildpacks 和 node 的文档:
- https://devcenter.heroku.com/articles/nodejs-support
基于此,我将 package.json 文件更改为如下所示:
},
"version": "0.1.0",
"engines": {
"node": "12.16.x"
},
"devDependencies": {
"webpack-dev-server": "^3.10.3"
}
现在,错误消息已更改为:
remote: Running: rake assets:precompile
remote: yarn install v1.16.0
remote: [1/5] Validating package.json...
remote: error jobpro@0.1.0: 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
我假设 package.json 文件中的更新会导致 heroku 使用指定的节点版本。然而,事实并非如此。
The question is: How can I define which node version heroku uses?
解决这个问题需要一些研究。
Heroku 可以为每个应用程序应用多个构建包。在这种情况下,顺序很重要。我首先指定 运行 nodejs buidlpack,然后是 ruby buildpack。
只有这样 package.json 中的 "engine" 定义才会生效。如果您使用 ruby buildpack,节点版本默认为 10.15.3。但是,如果您先执行 nodejs buildpack,它将安装 package.json 文件中指定的版本。
https://devcenter.heroku.com/articles/ruby-support#installed-binaries
我正在努力将新的 rails 6 应用程序部署到 heroku。它 运行 在我本地没问题。在部署过程中,我收到以下输出。
不幸的是,我是 webpack 和 yarn 的新手。这似乎是 move-file 的版本/依赖性问题,而 move-file 又似乎是 webpacker 的依赖性。但是,我不知道如何解决这个问题。
似乎归结为这一行:
error move-file@2.0.0: The engine "node" is incompatible with this module. Expected version ">=10.17". Got "10.15.3"
但是,节点不是我的节点模块之一,但似乎是已安装的二进制文件。当我 运行
node - v
我得到:v12.16.1
如有任何帮助,我们将不胜感激。
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 fsevents@1.2.13: The platform "linux" is incompatible with this module.
remote: info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation.
remote: error move-file@2.0.0: 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
如果您需要任何进一步的日志或代码示例,请告诉我。我很茫然。
===================== 更新:
我在 heroku 上找到了关于 buildpacks 和 node 的文档: - https://devcenter.heroku.com/articles/nodejs-support
基于此,我将 package.json 文件更改为如下所示:
},
"version": "0.1.0",
"engines": {
"node": "12.16.x"
},
"devDependencies": {
"webpack-dev-server": "^3.10.3"
}
现在,错误消息已更改为:
remote: Running: rake assets:precompile
remote: yarn install v1.16.0
remote: [1/5] Validating package.json...
remote: error jobpro@0.1.0: 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
我假设 package.json 文件中的更新会导致 heroku 使用指定的节点版本。然而,事实并非如此。
The question is: How can I define which node version heroku uses?
解决这个问题需要一些研究。 Heroku 可以为每个应用程序应用多个构建包。在这种情况下,顺序很重要。我首先指定 运行 nodejs buidlpack,然后是 ruby buildpack。 只有这样 package.json 中的 "engine" 定义才会生效。如果您使用 ruby buildpack,节点版本默认为 10.15.3。但是,如果您先执行 nodejs buildpack,它将安装 package.json 文件中指定的版本。 https://devcenter.heroku.com/articles/ruby-support#installed-binaries