【问题标题】:Heroku: "No default language could be detected for this app" error thrown for node appHeroku:节点应用程序抛出“无法检测到此应用程序的默认语言”错误
【发布时间】:2017-09-07 18:57:59
【问题描述】:

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

主文件夹中的每个子文件夹本身就是一个节点项目,并在 package.jsonnode_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'

这是项目的目录结构 -

我决定自己将todo-api 子文件夹重构到一个新项目中,这次推送到 Heroku 工作正常 -

我不明白为什么会出现“无默认语言”错误,尤其是当两个地方的节点应用程序完全相同时。有什么想法吗?

【问题讨论】:

    标签: javascript node.js git heroku


    【解决方案1】:

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

    This is the command for the node buildpack.
    如您所见,它要求 package.json 位于应用的根目录中,而不是在子文件夹中。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 你能详细说明这个After the backend project was pushed to GitHub as separate project吗?您是否为后端创建了单独的存储库?
      • 是的,我为后端创建了一个单独的存储库。
      • @RobinWieruch - 只需在子文件夹中执行git init
      【解决方案3】:

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

      【讨论】:

      • 我以为它只是我的 package.json 只包含“{}”,但这是因为我的 package.json 没有提交。谢谢!
      【解决方案4】:

      我收到了同样的信息

            No default language could be detected for this app.
      

      部署时我在与 master 不同的分支上。这就是它不起作用的原因。

      我将分支更改为 master 并且它工作了。

      不要忘记在 package.json 的脚本中加入 "start" : "node app.js"

      否则会出现H10代码错误。

      应用程序随后运行。

      【讨论】:

        【解决方案5】:

        您需要为项目设置语言。在不使用终端的情况下,转到 Heroku 项目。点击设置,向下滚动 Build Backbacks 并添加语言(nodejs 等)。

        【讨论】:

          【解决方案6】:

          我遇到了同样的问题并通过将我的服务器端文件(包括 package.json)放在根文件夹中来解决它,然后工作。

          【讨论】:

            【解决方案7】:

            您应该正确地制作您的 requirements.txt 文件。 我收到此错误是因为我使用 (pip freeze > requirements.txt) 命令来创建文件。 但它应该是 pip freeze > requirements.txt 没有任何空格。

            【讨论】:

            【解决方案8】:

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

            • 客户
            • 服务器

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

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

            git subtree push --prefix sub-folder heroku master
            ex:- git subtree push --prefix server heroku master
            

            这对我有用。

            编码愉快。

            【讨论】:

            • 你能不能再请 elobaret 一点?你是在 CLI 上写的吗?你是一一写的吗?因为我在 CLI 上遇到了两条线的错误。
            【解决方案9】:

            这可能是因为您的 package.json 和 package-lock.json 文件位于根目录中,并且您有两个单独的客户端和服务器文件夹。

            将这些文件移动到服务器文件夹中并尝试“git push heroku master”

            它应该可以工作

            【讨论】:

              【解决方案10】:

              -> 确保 requirements.txt 位于项目的根文件夹中。

              -> 确保你推到正确的分支

              git push heroku your_branch_name_goes_here
              

              【讨论】:

                【解决方案11】:

                如果您分别有“客户端”(也称为“前端”)和“服务器”(也称为“后端”)文件夹,那么最好的方法可能是将前端文件夹移动到后端文件夹中。这样做:

                1. 确保您的计算机上有项目文件夹,然后删除 github 网站 repo 和 heroku 网站 repo。

                2. 删除项目文件夹中的 git 文件,即 ungit 文件夹。

                3. 获取您的前端文件夹并将其放在后端文件夹中。前端文件夹应与后端文件夹的package.json 文件处于同一级别。在此之后,您的项目文件夹就是您的后端文件夹。

                4. 在您的项目文件夹中打开 CMD/termial,在您的项目文件夹中打开 git init。您可能还想添加一个.gitignore 文件(它应该与package.json 文件处于同一级别)。里面.gitignore文件类型:node_modules

                5. 然后,转到 github 网站,创建一个与您的项目文件夹同名的 repo。然后复制github repo url。

                6. 然后在项目文件夹中打开 CMD 并:

                git add .
                git commit -m 'any message'
                git remote add origin <url>
                git push origin master
                
                1. 转到 heroku,创建一个项目并将您的 heroku 项目连接到 github 存储库。还允许自动部署。

                2. 重要提示:打开后端文件夹的 package.json 文件。由于您的后端 package.json 文件与前端文件夹处于同一级别,您只需删除一个点:

                    "client": "npm run start --prefix ../frontend",
                

                改成这样:

                    "client": "npm run start --prefix ./frontend",
                
                1. 要进行测试,请对项目文件夹稍作更改,然后
                git add
                git commit -m 'any message'
                git push origin master
                

                检查是否将更改上传到 github。 然后检查更改是否成功上传到heroku。

                【讨论】:

                  【解决方案12】:

                  我也面临同样的问题。我通过将requirement.txt 名称更改为requirements.txt 解决了我的问题,请查看's'

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

                  【讨论】:

                  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
                  猜你喜欢
                  • 1970-01-01
                  • 2017-02-13
                  • 2017-05-16
                  • 2017-10-29
                  • 2021-01-23
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-10-30
                  相关资源
                  最近更新 更多