Django和gunicorn:在Heroku的环境特定文件夹中指定django.wsgi文件的路径

时间:2014-03-27 22:26:21

标签: django heroku wsgi gunicorn

我的项目基于django startproject:https://github.com/lincolnloop/django-startproject/

这是我的procfile:

web: gunicorn <myproject>.wsgi:application

现在我的设置如下:

[myproject的]
--- [CONF]
------ [本地]
---------settings.py
------ [QA]
---------settings.py

--- [server_configs]
------ [本地]
--------- django.wsgi
------ [QA]
--------- django.wsgi

我的django.wsgi看起来像这样:

import os
import sys
import django.core.handlers.wsgi

sys.path.append('/app')
sys.path.append('/app/myproject')

os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.conf.qa.settings'
application = django.core.handlers.wsgi.WSGIHandler()

我想将qa / django.wsgi用于Heroku,但我收到错误消息:

ImportError:没有名为[myproject] .wsgi

的模块

我已经完成了这篇文章中的解决方案:Configuring gunicorn for Django on Heroku但我的运气没有运气。

现在我的PYTHONPATH是/ app并且已经尝试了Gunicorn+Django+Heroku. Python Path Issue而没有运气。

2 个答案:

答案 0 :(得分:2)

我曾遇到过类似的问题。基本上,你从你的根目录运行gunicorn,但你的wsgi在[my_project]/[server_configs]/[qa]/

有两种方法可以解决这个问题。如果每个目录都有一个 init .py文件,你可以像普通的python模块一样调用它。使用:

web: gunicorn [myproject].[server_configs].[qa].django.wsgi:application

如果他们没有 init .py文件(我没有),您需要将Procfile切换到正确的目录。尝试:

web: sh -c 'cd [server_configs]/[qa] && gunicorn django.wsgi:application'

基本上这是在你的shell中运行命令来(1)更改目录和(2)运行gunicorn。

答案 1 :(得分:1)

Heroku允许您在Procfile中使用环境变量。如果你在Heroku上定义一个环境变量,如下所示:heroku config:set WSGI_PATH=path/to/my/file/wsgi.py,那么在你的Procfile中执行:gunicorn $WSGI_PATH:application你应该好好去!