我有一个使用React,Webpack和Yarn的Rails应用程序用于客户端。我在/client 目录中拥有与客户端相关的所有内容。这包括我的yarn.lock和package.json文件。我有一个 Procfile,它 cd 到/client 并正确运行yarn run build
.这在本地工作,没有错误。但是,当我部署/推送到 Heroku 时,我的推送被拒绝,并且出现以下错误:
remote: cd client && yarn run build:production
remote: sh: 1: yarn: not found
remote: rake aborted!
remote: Command failed with status (127): [cd client && yarn run build:production...]
这告诉我,Heroku无法在根级别找到yarn.lock文件。如何让 Heroku 在我的/client 目录中使用yarn.lock
文件?
还是此错误的原因完全是其他原因?
确保同时使用 ruby 和节点构建包。当我没有时,我得到了这个错误。
在根文件夹中执行以下命令:
heroku buildpacks:set heroku/ruby
heroku buildpacks:add --index 1 heroku/nodejs
资料来源: https://devcenter.heroku.com/articles/using-multiple-buildpacks-for-an-app
https://github.com/shakacode/react_on_rails/blob/master/docs/additional-reading/heroku-deployment.md
我自己刚刚经历过类似的事情。您需要对构建包进行排序,以便节点排在第一位。如果 yarn.lock 位于您的根目录中(或者 yarn 位于您的"引擎"键中,如 @remydib 的答案(,那么节点构建包将安装 yarn,然后是您的软件包。如果你在/client 中有一个yarn.lock
,把一个放在根目录中,然后添加一个postinstall
脚本,上面写着cd client && yarn run build
。
就我而言(rake assets:precompile 调用 yarn 并失败(,出于某种原因,当构建包变成 ruby -> 节点时,Heroku 在尝试运行 rake 任务之前不会等待节点安装,我们去 kablooie。
希望这有帮助。
-
使用
yarn
安装应用程序的依赖项a(
yarn.lock
应存在于存储库的根目录中。yarn install
b( 应删除package-lock.json
git rm package-lock.json
-
使用
npm
a( 应删除
yarn.lock
来源: https://devcenter.heroku.com/articles/ruby-support#installed-binaries
https://docs.npmjs.com/files/package-lock.json
也许你可以尝试在package.json中输入
"engines": {
"node": "^6.9",
"yarn": "^0.21"
},
我将为文档另一个可能的用例添加一个答案。我经历了类似的,多个构建包,我已经检查了所有答案中的所有内容:
-
node-js
首先在文件中声明.buildpacks
- 在项目的根目录中添加了
yarn.lock
在 - 引擎下声明的纱线依赖
package.json
尽管如此,yarn
并没有回升,因为我使用的是旧版本的node-js构建包。
碰撞最新的构建包版本解决了我的问题:
https://github.com/heroku/heroku-buildpack-nodejs#v118
你可以保留 package.json 和 yarn.lock,方法是将其中一个添加到.slugignore.
它的工作方式类似于 .gitignore - 它只是定义了要忽略哪些文件推送到 Heroku。
在此处查看更多信息