我有一个使用React,Webpack和Yarn的Rails应用程序用于客户端。我在/ client目录中拥有与客户端相关的所有内容。这包括我的yarn.lock和package.json文件。我有一个proc文件,cds到/ 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
文件?
或者这个错误的原因是什么呢?
答案 0 :(得分:12)
确保同时使用ruby和node buildpack。当我没有时,我收到了这个错误。
在根文件夹中执行以下操作:
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
答案 1 :(得分:9)
我自己也经历过类似的事情。您需要订购构建包,以便节点是第一个。如果yarn.lock在你的根目录中(或者纱线在你的“引擎”键中,就像在@ remydib的答案中那样),那么节点buildpack将安装yarn然后你的包。如果您在/ client中有一个yarn.lock
,请将其中一个放在root用户中,然后向其中添加一个postinstall
脚本,其中显示cd client && yarn run build
。
在我的情况下(rake资产:预编译调用yarn和failed),由于某种原因,当buildpacks为ruby时 - >在尝试运行rake任务之前,Heroku不会等待节点安装,我们去kablooie。
希望这有帮助。
答案 2 :(得分:1)
也许您可以尝试输入package.json
"engines": {
"node": "^6.9",
"yarn": "^0.21"
},
答案 3 :(得分:0)
使用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
答案 4 :(得分:0)
我将为文档添加另一个可能的用例的答案。我经历了类似的,多个buildpacks,我检查了所有答案中的所有内容:
node-js
在.buildpacks
档案yarn.lock
package.json
尽管如此yarn
因为我使用的是旧版本的node-js buildpack而没有提升。
将buildpack的最新版本改为解决我的问题:
https://github.com/heroku/heroku-buildpack-nodejs#v118
答案 5 :(得分:0)
你可以通过添加其中一个来保存package.json和yarn.lock
.slugignore。
它的作用类似于.gitignore - 它只是定义要忽略哪些文件推送到Heroku。