3

こんにちは、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 にそのファイルを選択させるにはどうすればよいですか?

4

2 に答える 2

2

あなた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

于 2012-09-18T17:48:38.667 に答える
0

インストールした別のパッケージに wsgi.py というファイルが既に含まれているかどうかを確認します。(gevent はそうです。) もしそうなら、間違った wsgi.py ファイルがロードされている可能性があります。wsgi.py ファイルの名前を別の名前 (app_wsgi.py など) に変更し、次を使用してアプリを実行します。

gunicorn -c /home/code/gunicorn_config.py app_wsgi
于 2013-03-09T17:33:56.383 に答える