为啥 Heroku 无法检测到 Node.js buildpack?
Posted
技术标签:
【中文标题】为啥 Heroku 无法检测到 Node.js buildpack?【英文标题】:Why does Heroku fail to detect Node.js buildpack?为什么 Heroku 无法检测到 Node.js buildpack? 【发布时间】:2016-12-04 03:00:02 【问题描述】:我 git 克隆了一个 Node.js 应用程序(package.json
中指定的版本为4.1.2
,我的本地计算机的版本为6.2.2
)并尝试在 Heroku 上进行 git push。但是它构建失败并给出了这个错误:
未能检测到 set buildpack https://codon-buildpacks.s3.amazonaws.com/buildpacks/heroku/nodejs.tgz
现在我将 buildpack 设置为 heroku/nodejs 并收到以下消息:
Buildpack set. Next release on lit-badlands-92088 will use heroku/nodejs.
Run git push heroku master to create a new release using this buildpack.
现在当我运行git push heroku master
时,我再次被告知:
remote: -----> Failed to detect set buildpack
https://codon-buildpacks.s3.amazonaws.com/buildpacks/heroku/nodejs.tgz
remote: More info:
https://devcenter.heroku.com/articles/buildpacks#detection-failure
remote:
remote: ! Push failed
remote: Verifying deploy...
remote:
remote: ! Push rejected to lit-badlands-92088.
即使我设置了 Node.js buildpack 也没有被检测到的可能原因是什么?
【问题讨论】:
这能回答你的问题吗? Heroku: "No default language could be detected for this app" error thrown for node app 【参考方案1】:这意味着package.json
文件未检入您的 git 项目的根目录,因此 Heroku 检测到它不是 Node.js 应用程序。你可以在本地看到这个:
git show master:package.json
要修复它,您需要确保项目的根目录中有一个 package.json(其中还有一个 .git 目录),并将其添加到 git:
git add package.json
git commit -m 'track package.json'
可以改进措辞('未能检测到集合 buildpack')。它可能应该说“未能检测到 Node.js 应用程序”。当 buildpack 的“检测”脚本运行 (https://github.com/heroku/heroku-buildpack-nodejs/blob/master/bin/detect) 时,它会查找 package.json 文件以验证是否有可构建的节点应用程序。
【讨论】:
我遇到了同样的问题,并且 package.json 存在于我的仓库中。您知道导致此错误的另一个可能原因是什么吗? 所以 package.json 需要在有 .git 的文件夹中?在我的根目录中,我有 .git 和一个名为 node 的文件夹,在 node 文件夹中,我有 index.js 和包。 json. 这是因为 package.json 位于子目录而不是 git repo 的根目录中吗?我应该尝试将 package.json 移动到根目录吗? 是 - package.json 必须在项目的根目录下。 @huterloft 是正确的。我还要补充一点,在子目录中工作的开发人员必须将他们的package.json
从子目录复制到有.git
文件夹的根文件夹,或者将整个应用程序从子目录移动到根文件夹,然后在这个根目录中初始化一个 git。这将有助于开发人员尝试使用 heroku 部署应用程序:git push heroku master
【参考方案2】:
这是因为 Heroku 认为您正在部署一个 Node 应用程序。但是您要部署的是 Node 应用程序的 public
目录,而不是 Node 代码。
Heroku 使用 buildpacks 来选择如何处理 ap。您要清除该节点关联:
buildpacks:clear # clear all buildpacks set on the app
这意味着“下一个版本将正常检测 buildpack。”,应该会为您解决。
参考:https://devcenter.heroku.com/articles/buildpacks
【讨论】:
是的,这对我也有用【参考方案3】:我有类似的问题,这里是解决问题的步骤。
heroku buildpacks:set heroku/nodejs
git push heroku master
详细信息在更多信息链接中 -
如果您删除或重命名以前导致自动检测您的应用程序类型并因此自动设置在您的应用程序上检测到的构建包的文件,也可能会发生这种情况。
【讨论】:
Error: The buildpack heroku/nodejs is already set on your app.
是消息【参考方案4】:
如果你在一个分支上工作,你需要设置master来跟踪你的分支
git branch -f --track master origin/branch_name
检查 master 中的 package.json
git show master:package.json
如果可用,请再次尝试推送。
git push heroku master
`
【讨论】:
【参考方案5】:对其他答案的一些细微说明: 错误“未能检测到 set buildpack https://codon-buildpacks.s3.amazonaws.com/buildpacks/heroku/nodejs.tgz”或任何类似内容,表示您尝试推送到 heroku 的 GIT COMMIT 未检测到作为一个 node.js 应用程序。 (注意大写的细微之处)。
我最近犯了一个愚蠢的错误,这让我意识到了这一点:运行“ls -a”表明我的 package.json 和 .git 文件位于同一个根目录中,这是 heroku 要求的。除了 package.json 文件未包含在我最新的 git 提交中。运行“git status”提醒我 package.json 是一个未跟踪的文件。所以我添加了它,ta-da,推送到 heroku 工作。
如果您收到与 buildpack 相关的错误,请检查您的 GIT COMMIT 根目录中是否有 package.json 文件。如果这是真的,请尝试使用“heroku buildpacks:set heroku/nodejs”(或您想要的语言)手动指定构建包。这应该可以解决与 buildpack 检测相关的大多数错误。
【讨论】:
【参考方案6】:大多数应用都至少存在这些签名中的一个,因此如果您看到此错误,通常意味着您的 git 存储库中没有检入重要文件:
Java:pom.xml
Ruby:Gemfile
Node.js:package.json
Python:requirements.txt/setup.py/Pipfile
php:composer.json / index.php
你应该:
git add file
git commit -am 'added file
git push heroku master
【讨论】:
【参考方案7】:我遇到了同样的问题并尝试了所有方法,最终意识到没有文件会提交,因为它们已经提交并推送到了 github 存储库。 所以你需要做到以下几点:
删除旧的 git。文件夹:创建新的 git:rm -rf .git
添加所有项目文件:git 初始化
提交:git 添加。
创建新的 Heroku 应用程序:git commit -m “提交名称”
推送代码到master:heroku 创建
git push heroku 大师
这对我有用。
【讨论】:
【参考方案8】:我添加 Pakage.json 文件,然后
删除旧的 git。文件夹: rm -rf .git
创建新的 git: git初始化
添加所有项目文件: 混帐添加。
提交: git commit -m “提交名称”
创建新的heroku应用程序: heroku 创建
推送代码掌握: git push heroku 大师
应用在heroku上成功部署。
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于为啥 Heroku 无法检测到 Node.js buildpack?的主要内容,如果未能解决你的问题,请参考以下文章
应用程序中发生错误,无法提供您的页面将 Node.Js REST 部署到 heroku