Heroku:"没有为此应用检测到默认语言"节点应用程序抛出的错误

Man*_*iri 7 javascript git heroku node.js

我正在学习NodeJS,我正在学习的课程有几个项目,按部分排列.我将所有项目都放在一个主文件夹下,这也是一个git存储库.

主文件夹中的每个子文件夹都是一个节点项目,完整的package.json和相关的依赖项node_modules.问题是当我尝试将节点应用程序推送到一个这样的文件夹(todo-api)到heroku时,我收到以下错误 -

remote: Compressing source files... done.
remote: Building source:
remote: 
remote:  !     No default language could be detected for this app.
remote:                         HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically.
remote:                         See https://devcenter.heroku.com/articles/buildpacks
remote: 
remote:  !     Push failed
remote: Verifying deploy...
remote: 
remote: !       Push rejected to agile-forest-32749.
remote: 
To https://git.heroku.com/agile-forest-32749.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/agile-forest-32749.git'
Run Code Online (Sandbox Code Playgroud)

这是项目的目录结构 -

在此输入图像描述

我决定将todo-api子文件夹单独重构为一个新项目,这次推向Heroku工作得很好 -

在此输入图像描述

我不明白为什么我会得到"无默认语言"错误,特别是当两个地方的节点应用程序完全相同时.有什么想法吗?

Dam*_*IEU 30

Heroku 有一组默认的构建包,当它需要检测你的应用程序的语言时使用。
为了进行检测,它会运行bin/detect每个默认构建包的命令,直到其中一个返回 0 退出代码。

这是节点 buildpack 的命令
如您所见,它要求 apackage.json位于应用程序的根目录,而不是位于子文件夹中。

这是导致构建失败的差异。您需要将您的应用程序放在 git 存储库的根目录下。


Rob*_*uch 15

就我而言,我没有在根文件夹中设置 Heroku,因为我的 GitHub 存储库被拆分为frontend/backend/文件夹。他们每个人都有一个package.json。由于 Heroku 需要存储库根文件夹中的package.json文件,因此无法检测语言。

就我而言,我必须在backend/文件夹中初始化一个辅助 GitHub 存储库。在后端项目作为单独的项目推送到 GitHub 后,git push heroku master工作。

  • 您能详细说明一下“后端项目作为单独项目推送到 GitHub 之后”吗?您是否为后端创建了单独的存储库? (2认同)

aja*_* mp 12

就我而言,我的项目根目录中有 2 个子文件夹

  • 客户
  • 服务器

所以我想将 Server 文件夹部署到 Heroku,所以我没有将服务器内容移动到项目的根目录(再次繁忙的工作),而是使用下面的代码来解决这个问题

在你的项目的根目录中执行此操作

git subtree push --prefix sub-folder heroku master
ex:- git subtree push --prefix server heroku master
Run Code Online (Sandbox Code Playgroud)

编辑:在运行上述命令之前添加并提交代码,否则它将无法工作。

这对我有用。

快乐编码。


Mah*_*ati 10

就我而言,我有待处理的文件需要提交给 github :)


小智 7

我也面临着同样的问题。我通过更改requirement.txt名称解决了我的问题,requirements.txt所以看看's'

requirements.txtHeroku 的自动检测需要准确的名称。


小智 5

您需要为项目设置语言。不使用终端,进入 Heroku 项目。单击“设置”,向下滚动“构建 Backbacks”并添加语言(nodejs 等)。