1

gevent を使用して、gunicorn サーバーで Django アプリを実行しようとしています。gunicorn.conf 内で、すべてにモンキーパッチを適用しました。

def on_starting(server):
    from gevent import monkey
    monkey.patch_socket()

def post_fork(server, worker):
    import pymysql
    pymysql.install_as_MySQLdb()

更新: pymysql 0.5 で Django 1.5 を使用しています

Django を実行すると、次の例外が発生します。

ImportError at /
Exception Value: cannot import name SERVER_STATUS
Exception Location: /var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/pymysql/connections.py in <module>, line 37

これはトレースバックです:

File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
    92.                     response = middleware_method(request)
File "/var/www/myproject/myproject/myapp/middleware.py" in process_request
    91.             if not request.session.get('language_code', False):
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py" in get
  57.         return self._session.get(key, default)
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py" in _get_session
  168.                 self._session_cache = self.load()
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/django/contrib/sessions/backends/db.py" in load
  18.                 expire_date__gt=timezone.now()
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/manager.py" in get
  143.         return self.get_query_set().get(*args, **kwargs)
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/query.py" in get
  382.         num = len(clone)
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/query.py" in __len__
  90.                 self._result_cache = list(self.iterator())
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/query.py" in iterator
  301.         for row in compiler.results_iter():
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in results_iter
  775.         for rows in self.execute_sql(MULTI):
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
  839.         cursor = self.connection.cursor()
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/backends/__init__.py" in cursor
  324.             cursor = self.make_debug_cursor(self._cursor())
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/backends/mysql/base.py" in _cursor
  405.             self.connection = Database.connect(**kwargs)
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/MySQLdb/__init__.py" in Connect
  80.     from MySQLdb.connections import Connection
File "/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/pymysql/connections.py" in <module>
  37. from constants import SERVER_STATUS

ここで SERVER_STATUS をインポートできない理由がわかりません。このファイルは存在し、「python manage.py shell」内にこのファイルをインポートできます。つまり、「pymysql.constants import SERVER_STATUS から」機能します。

何かアドバイスはありますか?これは本当にばかげたバグだと想像できます...

前もって感謝します!

4

1 に答える 1

0

以下を移動してみてください。

import pymysql
pymysql.install_as_MySQLdb()

settings.py へ

于 2013-10-16T19:01:44.437 に答える