为什么Heroku无法检测到Node.js构建包?

30

我克隆了一个Node.js应用程序(在package.json中指定版本为4.1.2,而我的本地机器版本为6.2.2),并尝试在Heroku上进行git push。但构建失败并出现以下错误:

无法检测到设置的构建包 https://codon-buildpacks.s3.amazonaws.com/buildpacks/heroku/nodejs.tgz

现在我将构建包设置为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,为什么可能仍然无法检测到它的原因是什么?

8个回答

39
这意味着你的git项目根目录没有上传package.json文件,所以Heroku检测到这不是一个Node.js应用程序。你可以在本地查看:
git show master:package.json

要修复它,您需要确保项目根目录(也是 .git 目录所在的地方)中有一个 package.json 文件,并将其添加到 git 中:

要解决此问题,需确认您的项目根目录(.git 目录所在的位置)中存在 package.json 文件,并将其加入到 git:

git add package.json
git commit -m 'track package.json'

措辞('failed to detect set buildpack')可以改进。可能应该说“无法检测到Node.js应用程序”。当运行构建包的“detect”脚本时(https://github.com/heroku/heroku-buildpack-nodejs/blob/master/bin/detect),它会查找package.json文件以验证是否有一个可用于构建的节点应用程序。


我遇到了同样的问题,而且我的repo中存在package.json。你知道这个错误可能的另一个原因是什么吗? - katie
1
那么 package.json 需要在具有 .git 的文件夹中吗?在我的根目录中,我有 .git 和一个名为 node 的文件夹,在 node 文件夹中,我有 index.js 和 package.json。 - Shree
1
这是因为 package.json 文件在 git 仓库的子目录中而不是根目录中吗?我应该尝试将 package.json 移动到根目录中吗? - Shree
2
是的 - package.json 必须位于项目的根目录中。 - hunterloftis
1
@huterloftis 是正确的。我还要补充一点,工作在子目录中的开发人员必须将他们的 package.json 从子目录复制到根目录,即 .git 文件夹所在的位置,或者将整个应用程序从子目录移动到根目录,然后在此根目录中初始化 git。这将有助于开发人员在尝试使用 heroku 部署应用程序时:git push heroku master - Junior Mayhé
显示剩余2条评论

10

这是因为Heroku认为您正在部署一个Node应用程序。但是您要部署的是一个Node应用程序的public目录,而不是Node代码。

Heroku使用构建包来选择如何处理应用程序。您想清除该Node关联:

heroku buildpacks:clear # 清除应用程序上设置的所有构建包

这意味着“下一个发布将正常检测构建包。”,这应该能解决您的问题。

参考:https://devcenter.heroku.com/articles/buildpacks


是的,这对我也可以。 - Cryptex Technologies

6

我曾经遇到过类似的问题,以下是解决问题的步骤。

heroku buildpacks:set heroku/nodejs
git push heroku master

详细信息请参见更多信息链接 -


如果您删除或重命名先前导致自动检测应用程序类型的文件,则可能出现此情况,从而自动设置检测到的构建包到您的应用程序。



错误:您的应用程序已设置heroku/nodejs构建包。 - maudulus

4
如果你正在处理一个分支,你需要设置主分支来跟踪你的分支。 git branch -f --track master origin/branch_name 检查主分支中是否有 package.json 文件。 git show master:package.json 如果有,尝试再次推送。 git push heroku master

2
一些其他答案中的细微澄清: 错误“无法检测到设置 buildpack https://codon-buildpacks.s3.amazonaws.com/buildpacks/heroku/nodejs.tgz”或类似错误,意味着你正在尝试推送到 Heroku 的 GIT COMMIT 未被检测为 node.js 应用程序。(请注意大小写)。
我最近犯了一个愚蠢的错误,让我意识到这一点:运行“ls -a”显示我的 package.json 和 .git 文件位于同一根目录下,符合 Heroku 的要求。但是,在我最新的 git 提交中,package.json 文件没有包含在内。“git status”提醒我 package.json 是一个未跟踪的文件。所以我添加了它,然后,推送到 Heroku 就可以工作了。
如果出现与 buildpack 相关的错误,请检查你的 GIT COMMIT 是否在根目录中有一个 package.json 文件。如果是这样,请尝试使用“heroku buildpacks:set heroku/nodejs”(或你想要的语言)手动指定 buildpack。这应该可以解决大多数与 buildpack 检测相关的错误。

1
我遇到了同样的问题,尝试了各种方法,最终发现没有文件会提交,因为它们已经提交并推送到了Github存储库中。所以你需要执行以下步骤:
- 删除旧的git文件夹:
rm -rf .git
- 创建新的git:
git init
- 添加所有项目文件:
git add .
- 提交:
git commit -m “commit name”
- 创建新的Heroku应用程序:
heroku create - 将代码推送到主分支:
git push heroku master 这对我有用。

1

大多数应用程序至少有一种这些签名存在,因此如果您看到此错误,则通常意味着未将重要文件检入您的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

0

我添加了Pakage.json文件,然后

删除旧的git文件夹: rm -rf .git

创建新的git: git init

添加所有项目文件: git add .

提交: git commit -m “提交名称”

创建新的heroku应用程序: heroku create

将代码推送到主分支: git push heroku master

应用程序已成功部署在heroku上。


1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接