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

我是新来的heroku和gunicorn,所以我不知道这是如何工作的。 但我已经做了一些search,我想我已经接近部署我的Django应用程序(1.5.1)。 所以我知道我需要一个Procfile

web: gunicorn app.wsgi 

因为我的目录有点不同 我不能在根目录下运行gunicorn

 app_project requirements/ contributors/ app/ app/ settings/ wsgi.py # Normally Procfile goes here Procfile 

通常应用程序/将是根目录,但我决定这样构造我的文件夹来分隔我的Django应用程序从其他一些事情。 由于我必须把procfile放在heroku的根目录下才能识别,我应该在procfile中join什么和/或者我应该在gunicorn命令中join什么参数?

注意:

 web: gunicorn app.wsgi # won't work because Procfile is in a directory above # I also want to keep the directories as is # I also don't want to create a secondary git inside the app folder just for heroku web: gunicorn app.app.wsgi # won't work because I don't want to convert the folder into a python module 

尝试:

 web: gunicorn --pythonpath app app.wsgi 

正如@Graham Dumpleton在他的回答中所说,OP的问题可以通过修改他的Procfile来解决:

web: gunicorn --pythonpath app app.wsgi

为什么这个工作:

  • 请记住,Herc简单地使用Procfile来启动进程。 在这种情况下,gunicorn进程。
  • --pythonpath--pythonpath参数允许您dynamic地将目录附加到Python运行时search模块查找的目录列表。
  • 通过向--pythonpath app命令添加--pythonpath app ,解释器基本上被告知“ 查看应用程序目录的内部(称为应用程序),其中包含名为wsgi的模块。 `

在OP的问题中的文件夹的通用名称可以掩盖命令的语法,如下所示: gunicorn --pythonpath <directory_containing_package> <package>.<module>

更多信息:
Gunicorn文档

我做了一个丑陋的黑客得到这个工作。 所以我会发布我的答案,但我希望你们能想出一个更好的解决scheme

Procfile

 web: sh ./app/run.sh 

app_project /应用程序/ run.sh

 #!/bin/bash cd app gunicorn app.wsgi