簡體   English   中英

Django Gunicorn wsgi

[英]Django Gunicorn wsgi

嗨,我正在嘗試將我的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

所以視圖模塊中的變量應用程序。 您可以閱讀Django如何為您提供應用程序對象

可能是你需要在po.wsgi模塊本身指向gunicorn。 從目前為止提供的信息來看,這有點難以辨別。 如果該模塊是正確創建的,它應該包含一個名為application的變量

檢查您安裝的另一個軟件包是否已包含名為wsgi.py的文件。 (gevent確實。)如果是這樣,可能是加載了錯誤的wsgi.py文件。 嘗試將您的wsgi.py文件重命名為其他內容(例如app_wsgi.py)並添加運行您的應用程序

gunicorn -c /home/code/gunicorn_config.py app_wsgi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM