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



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

这是我的个人档案:

web: gunicorn <myproject>.wsgi:application

现在我的设置是这样的:

[myproject]
——[设计]
——(本地)
——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,但我得到一个错误说:

importterror: No module named [myproject].wsgi

我已经在这篇文章中尝试了一些解决方案:在Heroku上为Django配置gunicorn,但我没有运气。

现在我的PYTHONPATH是/app,并且已经尝试了Gunicorn+Django+Heroku。Python路径问题也没有运气

我曾经遇到过类似的问题。基本上,您正在从根目录运行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.

Heroku允许您在Procfile中使用环境变量。如果你在Heroku上定义了一个环境变量,像这样:heroku config:set WSGI_PATH=path/to/my/file/wsgi.py,那么在你的Procfile中:gunicorn $WSGI_PATH:application就可以了!

最新更新