首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Gunicorn wsgi

Django Gunicorn wsgi
EN

Stack Overflow用户
提问于 2012-09-17 08:51:35
回答 2查看 5.4K关注 0票数 3

嗨,我正在尝试集成我的django 1.4.1应用程序与Gunicorn 0.14.6。我是从命令行启动的,就像-

代码语言:javascript
复制
gunicorn -c /home/code/gunicorn_config.py

我得到了这个回溯-

代码语言:javascript
复制
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文件内容-

代码语言:javascript
复制
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选择那个文件的?

EN

回答 2

Stack Overflow用户

发布于 2012-09-18 17:48:38

您的django_settings不正确。django_settings应该以从您设置的python导入的python模块的形式出现。所以

代码语言:javascript
复制
pythonpath = '/home/code/po'
django_settings = 'po.settings'

为了进一步说明,application是默认变量(应该是一个WSGI应用程序对象),gunicorn将尝试并从您提供的Python模块中导入。

所以换个角度想一想。假设你试图运行一个简单的烧瓶wsgi应用程序。实际的WSGI应用程序被定义为application,并生活在/home/code/views.py中。然后,下列人员将手动开始使用gunicorn服务

代码语言:javascript
复制
export PYTHONPATH=/home/code
gunicorn -w 2 views:application

因此,视图模块中的变量应用程序。你可以读到关于Django为您提供应用程序对象。是如何。

您可能需要将gunicorn指向po.wsgi模块本身。从到目前为止提供的信息来看,这有点难分辨。如果正确地创建了该模块,它应该包含一个名为application的变量。

票数 2
EN

Stack Overflow用户

发布于 2013-03-09 17:33:56

检查已安装的另一个包是否包含一个名为wsgi.py的文件。(gevent是这样的)如果是这样,则可能加载了错误的wsgi.py文件。尝试将您的wsgi.py文件重命名为其他东西(例如,app_wsgi.py),并使用

代码语言:javascript
复制
gunicorn -c /home/code/gunicorn_config.py app_wsgi
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12455883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档