为什么Heroku无法检测到Node.js buildpack?

时间:2016-07-29 11:46:59

标签: node.js git heroku git-clone buildpack

我git克隆了一个Node.js应用程序(package.json中指定的版本为4.1.2,我本地机器的版本为6.2.2)并尝试git push on Heroku。但它没有构建并给出了这个错误:

  

无法检测到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,可能的原因可能是什么?

7 个答案:

答案 0 :(得分:30)

这意味着未将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'

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

答案 1 :(得分:8)

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

Heroku使用buildpacks来选择ap的处理方式。您想要清除该节点关联:

buildpacks:clear # clear all buildpacks set on the app

这意味着“下一个版本将正常检测buildpack。”,这应该为您解决。

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

答案 2 :(得分:4)

我有类似的问题,以下是解决问题的步骤。

heroku buildpacks:set heroku/nodejs
git push heroku master

基本上细节在更多信息链接 -

如果您删除或重命名之前导致自动检测应用程序类型的文件,从而在您的应用程序中自动设置检测到的buildpack,也可能出现这种情况。

答案 3 :(得分:2)

如果您正在分支机构,则需要设置master来跟踪分支

git branch -f --track master origin/branch_name

检查master中的package.json

git show master:package.json

如果可用,请再次尝试。

git push heroku master

`

答案 4 :(得分:1)

对其他答案的一些细微澄清: 错误“无法检测到set 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是一个未跟踪的文件。所以我添加了它,ta-da,推向heroku工作。

如果收到与buildpack相关的错误,请检查您的GIT COMMIT是否在根目录中有一个package.json文件。如果是这样,请尝试使用“heroku buildpacks:set heroku / nodejs”(或您想要的语言)手动指定buildpack。这应解决与buildpack检测相关的大多数错误。

答案 5 :(得分:1)

我遇到了同样的问题并尝试了所有方法,最终意识到没有文件可以提交,因为它们已经提交并推送到github仓库中。 因此,您需要执行以下操作:

  • 删除旧的git。文件夹:

rm -rf .git

  • 创建新的git:

git init

  • 添加所有项目文件:

git add。

  • 提交:

git commit -m“提交名称”

  • 创建新的heroku应用程序:

heroku创建

  • 按下要掌握的代码:

git push heroku master

这对我有用。

答案 6 :(得分:0)

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