Python 如何修改Procfile以在Heroku上的非标准文件夹中运行Gunicorn进程?

Python 如何修改Procfile以在Heroku上的非标准文件夹中运行Gunicorn进程?,python,django,heroku,wsgi,gunicorn,Python,Django,Heroku,Wsgi,Gunicorn,我对heroku和gunicorn是新手,所以我不确定这是怎么回事。但我已经做了一些搜索,我想我已经接近部署我的Django应用程序(1.5.1)。所以我知道我需要一个Procfile web: gunicorn app.wsgi 因为我的目录有点不同。我无法在根目录中运行gunicorn app_project requirements/ contributors/ app/ app/ settings/

我对heroku和gunicorn是新手,所以我不确定这是怎么回事。但我已经做了一些搜索,我想我已经接近部署我的Django应用程序(1.5.1)。所以我知道我需要一个Procfile

web: gunicorn app.wsgi
因为我的目录有点不同。我无法在根目录中运行gunicorn

app_project
    requirements/
    contributors/
    app/
        app/
            settings/
            wsgi.py
        # Normally Procfile goes here
    Procfile
通常app/将是根目录,但我决定以这种方式构造我的文件夹,以将我的django应用程序与其他一些东西分开。因为我必须将Procfile放在根目录中,heroku才能识别它,所以我应该在Procfile中放置什么和/或在gunicorn命令中放置什么参数

注:


我做了一个丑陋的恶作剧,让这工作。所以我将发布我的答案,但我希望你们能想出一个更好的解决方案

程序文件

web: sh ./app/run.sh
app_项目/app/run.sh

#!/bin/bash

cd app
gunicorn app.wsgi
尝试:


正如@Graham Dumpleton在其回答中所述,OP的问题可以通过将其Procfile修改为以下内容来解决:

web:gunicorn-pythonpath应用程序app.wsgi

为什么这样做:

  • 请记住,Heroku只是使用Procfile来启动进程。在本例中,gunicorn处理
  • Gunicorn的
    --pythonpath
    参数允许您将目录动态附加到Python运行时在do模块查找时搜索的目录列表中
  • 通过将
    --pythonpath app
    添加到gunicorn命令中,解释器基本上被告知“在app目录中查找一个名为app的包(也称为app),其中包含一个名为wsgi的模块`
OP问题中文件夹的通用名称可能会模糊命令的语法,如下所示:
gunicorn--pythonpath.

更多信息:

如果您的文件嵌套在文件夹中,则以下内容更有意义

我没有将路径添加到PYTHONPATH环境变量,而是像引用包中的模块一样引用它:

在我的例子中,app对象在一个scriptC.py中,在folderB中,folderA中

web: gunicorn folderA.folderB.scriptC:app

我很好奇。。。为什么您不想将init.py文件添加到顶级应用程序/文件夹中?我已尝试将_uinit__;.py添加到同一项目布局中的顶级目录中,但它无法解决所有错误。即使传递了项目导入错误,也会出现设置导入错误,因为它们不在python路径中。因此,格雷厄姆的解决方案可能是最好的。对每一个不同论点的出色解释感谢你详细解释为什么被接受的答案有效。非常感谢!这个答案今天仍然有用!非常感谢。我在尝试部署django/vuejs应用程序时被绊倒了好几天,但在成功部署后,不断出现应用程序错误。这个问题似乎与wsgi和Procfile文件路径有关。你能帮我查一下吗?我的部署也有类似的问题,并且已经停滞了好几天。请你帮忙调查一下好吗?
web: gunicorn --pythonpath app app.wsgi
web: gunicorn folderA.folderB.scriptC:app