我是heroku和gunicorn的新手,所以我不确定这是如何工作的。但我已经做了一些搜索,我认为我已接近部署我的Django应用程序(1.5.1)。所以我知道我需要一个具有
的Procfileweb: gunicorn app.wsgi
因为我的目录有点不同。我无法在根目录中运行gunicorn
app_project
requirements/
contributors/
app/
app/
settings/
wsgi.py
# Normally Procfile goes here
Procfile
通常app /将是根目录,但我决定以这种方式构建我的文件夹以将我的django应用程序与其他一些东西分开。由于我必须将Procfile放在root目录中以便heroku识别它,我应该在Procfile中放入什么和/或我应该在gunicorn命令中放置什么参数?
注意:
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
答案 0 :(得分:57)
尝试:
web: gunicorn --pythonpath app app.wsgi
答案 1 :(得分:45)
正如@Graham Dumpleton在答案中所述,OP的问题可以通过将他的Procfile修改为以下内容来解决:
web: gunicorn --pythonpath app app.wsgi
为什么会这样:
--pythonpath
参数允许您动态地将目录附加到Python运行时在进行模块查找时搜索的目录列表。--pythonpath app
,解释器基本上被告知'在应用程序目录中查找名为app的包(也称为app),其中包含一个名为wsgi的模块。` OP问题中文件夹的通用名称可能会模糊命令的语法,如下所示:
gunicorn --pythonpath <directory_containing_package> <package>.<module>
更多信息:
Gunicorn Documentation
答案 2 :(得分:4)
我做了一个丑陋的黑客让这个工作。所以我要发布我的答案,但我希望你们能提出更好的解决方案
Procfile
web: sh ./app/run.sh
app_project /应用/ run.sh
#!/bin/bash
cd app
gunicorn app.wsgi
答案 3 :(得分:0)
我喜欢eikonomega的答案,但我想补充一下如何解决类似的问题:
我的文件有点难,因为我的文件位于更多文件夹中
我没有像在PYTHONPATH环境变量中添加路径那样,而是像在包中引用模块一样引用了它:
在我的情况下,该应用程序对象位于script1.py的答案文件夹中,该文件夹位于app8-web-financial-graph文件夹中。
web: gunicorn app8-web-financial-graph.answers.script1:app