python - Django Gunicorn wsgi

标签 python django wsgi gunicorn

您好,我正在尝试将我的 django 1.4.1 应用程序与 Gunicorn 0.14.6 集成。我像这样从命令行启动 gunicorn 服务器 -

gunicorn -c /home/code/gunicorn_config.py

我得到这个回溯 -

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 459, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 99, in init_process
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 101, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 24, in load
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 292, in import_app
    app = eval(obj, mod.__dict__)
  File "<string>", line 1, in <module>
NameError: name 'application' is not defined

我哪里错了?这个 application 变量是什么?我需要在哪里修改它?

此外,由于我使用的是 Django1.4.1,我的项目中已经有一个 wsgi.py 文件,我需要更改它吗?

更新:这是我的 gunicorn_config.py 文件内容 -

import os
import sys
import multiprocessing

def app_path():
    sys.path.append('/home/code/po/')
    sys.path.append('/home/code/po/ball/')
    return

def num_cpus():
    cpus = 0
    try:
        cpus = os.sysconf("SC_NPROCESSORS_ONLN")
    except:
        cpus =  multiprocessing.cpu_count()

    if cpus: return cpus
    else: return 3

#defining the behavior of gunicorn
app_path()

bind      = "127.0.0.1:8080"
workers   = num_cpus()*2 + 1
debug     = True
daemon    = False
accesslog = '/home/code/logs/guni_access.log'
errorlog  = '/home/code/logs/guni_error.log'
loglevel  = 'debug'
django_settings  = '/home/code/po/po/'
pythonpath       = '/home/code/po/'

@moopet - 我什至不认为调用了 wsgi.py 文件,如何让 gunicorn 选择该文件?

最佳答案

您的 django_settings 不正确。 django_settings 应该是 python 模块导入的形式,可以从您设置的 Python 路径导入。所以

pythonpath = '/home/code/po'
django_settings = 'po.settings'

更详细一点,application 是默认变量(应该是 WSGI 应用程序对象)gunicorn 将尝试从您提供的 Python 模块导入。

所以换个角度想。假设您正在尝试运行一个简单的 Flask wsgi 应用程序。实际的 WSGI 应用被定义为 application 并位于 /home/code/views.py 中。然后以下将手动开始使用 gunicorn 服务

export PYTHONPATH=/home/code
gunicorn -w 2 views:application

因此 View 模块中的变量应用程序。您可以了解如何 Django provides you with the application object .

您可能需要将 gunicorn 指向 po.wsgi 模块本身。从目前提供的信息来看有点难以判断。如果该模块创建正确,它应该包含一个名为 application

的变量

关于python - Django Gunicorn wsgi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12455883/

相关文章:

python - 创建 Pyramid 请求进行测试,以便触发事件

python - 根据字符串模式从列表创建列表

Python - 数据框中每个字符串的 str.match

python - 可以将 Python v. 2.7 与 Django 一起使用吗?

django - 我已经在 pythonanywhere 中部署了我的 django 项目,DATABASES is improperly configured 错误

python - 在 Flask (WSGI) 中使用全局单例,我是否需要担心竞争条件?

python - 如何停止从任务运行的 Airflow DAG

python - Django - pdf 响应编码错误 - reportlab

python - 按日期范围查询对象 - 错误 - {TypeError}预期字符串或类似字节的对象

python - 为 Pyramid Web 应用程序编写文档测试,该应用程序取决于 ini 文件中的设置