代码之家  ›  专栏  ›  技术社区  ›  Josh Laird

heroku:无法检测此应用程序的默认语言

  •  23
  • Josh Laird  · 技术社区  · 8 年前

    这是第一次使用Heroku。试图推动。我已经运行了命令:

    heroku create --buildpack heroku/python

    $ heroku create --buildpack heroku/python
    Creating app... done, glacial-reef-7599
    Setting buildpack to heroku/python... done
    https://glacial-reef-7599.herokuapp.com/ | https://git.heroku.com/glacial-reef-7599.git
    

    堆栈跟踪:

    $ git push heroku master
    Counting objects: 129, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (124/124), done.
    Writing objects: 100% (129/129), 69.06 KiB | 0 bytes/s, done.
    Total 129 (delta 22), reused 0 (delta 0)
    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 pure-badlands-9125.
    remote:
    To https://git.heroku.com/pure-badlands-9125.git
     ! [remote rejected] master -> master (pre-receive hook declined)
    error: failed to push some refs to 'https://git.heroku.com/pure-badlands-9125.git'
    

    我肯定错过了什么。

    requirements.txt 到我的根目录。它看起来像这样:

    .git
    .idea
    projectapp
    projectname
    rango
    db.sqlite3
    manage.py
    populate_rango.py
    requirements.txt
    
    15 回复  |  直到 7 年前
        1
  •  19
  •   Inzamam Malik    4 年前

    快速解决方案

    1. heroku仪表板 ( https://dashboard.heroku.com/ )
    2. 进入应用程序/项目
    3. 点击设置
    4. 向下滚动一点,然后 单击添加生成包
    5. 选择所需的构建包 (在我的例子中,我选择了heroku/nodejs)。

    实际上,heroku所做的是,它通过查看项目中的文件来识别您正在部署的项目,例如 package.json 如果您的项目有 requirements.txt 它理解的文件是一个python项目,等等,请参见 this document 了解您可以在heroku服务器上运行的语言

    正如您所知,要在计算机节点运行时中运行特定项目(如nodejs项目),必须将其安装在该计算机上,否则您无法在计算机上运行nodejs-app,heroku会在不同的容器中运行每个应用程序,这意味着在一个容器中只有一个应用程序在运行,当然,容器已经安装了nodejs,因此,如果一个容器只运行一个应用程序,那么在容器中安装所有其他运行时是没有意义的,因此容器只有一个运行时,在我的例子中是nodejs。当然,它们有其他类型的容器,比如一种用于python的容器,该容器安装了python运行时(特定版本),所以如果我的应用程序安装在python容器中,它将无法工作,因为我的应用在nodejs中。出于这个原因,我们需要在开始选择正确的容器类型时确定应用程序的类型,大多数情况下,heroku会自动检测到它,但如果检测不到,则必须通过转到它们的仪表板设置或通过项目中的运行时文件显式地告知,正如您可能已经注意到的那样,您只做了一次。

        2
  •  11
  •   willieswanjala    5 年前

    为了将来的参考,您必须确保您正在使用代码将分支推送到 heroku master .

    如果你从你的 master 分支,你所有的代码都在, develop 把它推给赫罗库大师。

    因此,代替:

    git push heroku master
    

    你可以这样做:

    git push heroku develop:master
    

    这个问题有重要的细节 How to push different local Git branches to Heroku/master

        3
  •  7
  •   rurp    8 年前

    您需要创建一个运行时。txt文件。在命令行上,与您的需求位于同一文件夹中。在txt文件中,输入 echo "python-3.5.1" > runtime.txt 当然,请确保将3.5.1与您正在使用的Python版本进行切换。

        4
  •  7
  •   user7217806    5 年前

    部署或使用时 Docker ,确保将应用程序的堆栈设置为 container ,如 docs :

    heroku stack:set container
    
        5
  •  4
  •   Josh Laird    7 年前

    我不记得我是怎么修复的,但看看 Date Modified

    runtime.txt (谢谢 鲁普 )其包含:

    python-3.5.2
    

    Procfile

    web: gunicorn projectname.wsgi --log-file -
    

    这是一个Django项目 projectname.wsgi 导致 wsgi.py 位于

    projectname/wsgi.py

    其中包括:

    import os
    import signal
    
    import sys
    import traceback
    
    import time
    from django.core.wsgi import get_wsgi_application
    from whitenoise.django import DjangoWhiteNoise
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "projectname.settings")
    
    application = get_wsgi_application()
    application = DjangoWhiteNoise(application)
    
        6
  •  3
  •   Indi    6 年前

    即使包括runtime.txt,我也有同样的问题。有效的是包含requirements.txt

        7
  •  3
  •   Gal Bracha    4 年前

    在我的例子中,我是在一个子git文件夹中。当我查看root.git文件夹时,项目确实没有 package.json 文件-因此heroku无法识别 webpack

        8
  •  2
  •   TsaiKoga    7 年前

    Herokus Python支持扩展到Python 2.x和Python 3.x系列的最新稳定版本。 今天,这种支持扩展到以下特定的运行时:

    • python-2.7.13
    • python-3.6.1

    尝试在runtime.txt中更改python版本

        9
  •  2
  •   pcsaunak    3 年前

    我正在运行一个django项目,对我来说,上面的解决方案都不起作用。最后,我放弃了,转到错误中提到的路径,它明确指出heroku需要以下文件中的一个来检测django项目:

    1. setup.py
    2. 皮菲尔

    我创建了一个需求。txt文件,通过复制项目根目录中pip freeze的内容,它工作正常。

        10
  •  2
  •   Amal Sunil    3 年前

    今天面对这个问题,我发布了 requirements.txt requirements.txt.txt (当文件已经是一个文本文件时,我用.txt扩展名直接命名了该文件),我还有一个 runtime.txt 包含内容的文件 python-3.8.7 .

    重新命名需求。txt文件正确解决了我的问题。

    我的根文件夹中有3个文件:代码。py,需求。txt和runtime.txt

        11
  •  1
  •   kartheek    6 年前

    创造 皮菲尔 根文件夹中的文件并添加 python version 以及应用所需的包。 check sample file here

    [[source]]
    
    url = "https://pypi.python.org/simple"
    verify_ssl = true
    
    
    [packages]
    
    django = "*"
    gunicorn = "*"
    django-heroku = "*"
    
    
    [requires]
    
    python_version = "3.6"
    

    也检查 Configuring Django Apps for Heroku

        12
  •  1
  •   litpumpk1n    5 年前

    还有一点需要注意的是,在将更改推送到Heroku之前,要将更改提交到git repo。 你可能有要求。txt本地设置,但如果它未提交到您的repo, git push heroku master 将无法找到它。

        13
  •  1
  •   Olamigoke Philip    4 年前

    如果您尝试了上述一些答案,但问题仍然存在;

    确保你是 git 在正确的目录中“提交”。

    例如,如果文件结构如下:

    /src
        /...
        manage.py
    .gitignore
    Pipfile/requirements.txt
    Pipfile.lock
    Procfile
    runtime.txt
    

    确保你 吉特 从根目录添加、提交、推送等。因为我们主要在 src/ main_app_directory/ 我们往往忘记在提交之前将目录更改回根目录。

        14
  •  1
  •   adwitr    2 年前

    嘿,伙计们,在过去的两天里,我一直在这个问题上,我找到了解决问题的方法。第一个修复方法是重命名

    “requirement.txt”改为“requirements.txt” 然后,我删除了runtime.txt 使用heroku cli清除构建包。将构建包设置为python heroku buildpacks:set heroku/python

    砰!它已经上传了,一切正常

        15
  •  1
  •   Justin Adam    2 年前

    添加 requirements.txt 即使一个空白文本文件对我起了作用,我也确保 无构建包 赫罗库补充道。