如何让 Heroku 识别子目录(不是根目录)中的 yarn.lock 或 package.json
How to get Heroku to recognize a yarn.lock or package.json within a subdirectory (not root)
我有一个 Rails 应用程序,在客户端使用 React、Webpack 和 Yarn。我在 /client 目录中拥有与客户端相关的所有内容。这包括我的 yarn.lock 和 package.json 文件。我有一个 Procfile,它可以 cds 到 /client 并正确运行 yarn run build
。这在本地工作没有错误。但是,当我 deploy/push 到 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
文件?
还是导致此错误的原因完全不同?
也许您可以尝试输入 package.json
"engines": {
"node": "^6.9",
"yarn": "^0.21"
},
确保同时使用 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 在你的 "engines" 键中,如@remydib 的回答),那么节点 buildpack 将安装 yarn 然后你的包。如果您在 /client 中有一个 yarn.lock
,请将一个放在根目录中,然后向其中添加一个 postinstall
脚本,上面写着 cd client && yarn run build
.
在我的例子中(rake assets:precompile 调用 yarn 并失败),出于某种原因,当构建包进入 ruby -> node 时,Heroku 在尝试 [= =23=] rake 任务,然后我们去 kablooie。
希望对您有所帮助。
使用yarn
安装应用程序的依赖项
a) yarn.lock
应该出现在 repo 的根目录中。
yarn install
b) package-lock.json
应该被删除
git rm package-lock.json
使用npm
a) yarn.lock
应该删除
来源:https://devcenter.heroku.com/articles/ruby-support#installed-binaries
我将为文档添加另一个可能的答案 use-case。我经历过类似的事情,多个 buildpacks,我已经检查了所有答案中的所有内容:
node-js
首先在 .buildpacks
文件中声明
- 在项目的根目录中添加了一个
yarn.lock
package.json
引擎下声明的 yarn 依赖项
尽管如此,yarn
并没有启动,因为我使用的是 node-js buildpack 的旧版本。
升级buildpack的最新版本解决我的问题:
https://github.com/heroku/heroku-buildpack-nodejs#v118
您可以同时保留 package.json 和 yarn.lock,方法是将其中之一添加到
.slugignore.
它的工作方式类似于 .gitignore - 它只是定义要忽略推送到 Heroku 的文件。
我有一个 Rails 应用程序,在客户端使用 React、Webpack 和 Yarn。我在 /client 目录中拥有与客户端相关的所有内容。这包括我的 yarn.lock 和 package.json 文件。我有一个 Procfile,它可以 cds 到 /client 并正确运行 yarn run build
。这在本地工作没有错误。但是,当我 deploy/push 到 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
文件?
还是导致此错误的原因完全不同?
也许您可以尝试输入 package.json
"engines": {
"node": "^6.9",
"yarn": "^0.21"
},
确保同时使用 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 在你的 "engines" 键中,如@remydib 的回答),那么节点 buildpack 将安装 yarn 然后你的包。如果您在 /client 中有一个 yarn.lock
,请将一个放在根目录中,然后向其中添加一个 postinstall
脚本,上面写着 cd client && yarn run build
.
在我的例子中(rake assets:precompile 调用 yarn 并失败),出于某种原因,当构建包进入 ruby -> node 时,Heroku 在尝试 [= =23=] rake 任务,然后我们去 kablooie。
希望对您有所帮助。
使用
yarn
安装应用程序的依赖项a)
yarn.lock
应该出现在 repo 的根目录中。yarn install
b)package-lock.json
应该被删除git rm package-lock.json
使用
npm
a)
yarn.lock
应该删除
来源:https://devcenter.heroku.com/articles/ruby-support#installed-binaries
我将为文档添加另一个可能的答案 use-case。我经历过类似的事情,多个 buildpacks,我已经检查了所有答案中的所有内容:
node-js
首先在.buildpacks
文件中声明- 在项目的根目录中添加了一个
yarn.lock
package.json
引擎下声明的 yarn 依赖项
尽管如此,yarn
并没有启动,因为我使用的是 node-js buildpack 的旧版本。
升级buildpack的最新版本解决我的问题:
https://github.com/heroku/heroku-buildpack-nodejs#v118
您可以同时保留 package.json 和 yarn.lock,方法是将其中之一添加到
.slugignore.
它的工作方式类似于 .gitignore - 它只是定义要忽略推送到 Heroku 的文件。