mysql - Django 1.6 w/gunicorn - 操作错误 : (2006, 'MySQL server has gone away' )

标签 mysql django gunicorn

在升级到 Django 1.6 的过程中,我开始收到频繁的 OperationalError: (2006, 'MySQL server has gone away') 请求到我用来运行的gunicorn服务器的消息Django 应用程序。这些错误从服务器启动的那一刻起就立即发生,请求只需要一秒钟,这让我怀疑这是一个超时问题。此错误不会出现在项目的旧 1.4 分支上,并且如果仅通过 django-admin.py runserver 提供服务,则 1.6 分支不会出现这种情况。

我通常使用命令 django-admin.py run_gunicorn --workers=4 -b localhost:8000 来通过 sv 进程运行gunicorn(尽管如果我手动运行它也会出错),结果是在许多请求中,即使是静态媒体的请求,也会返回:

[ERROR] 2015-07-29 14:30:27,931 - gunicorn.error:260 - Error handling request
Traceback (most recent call last):
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 125, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 187, in __call__
    self.load_middleware()
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 47, in load_middleware
    mw_instance = mw_class()
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/middleware/locale.py", line 24, in __init__
    for url_pattern in get_resolver(None).url_patterns:
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 365, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 360, in urlconf_module
    self._urlconf_module = import_module(self.urlconf_name)
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
  File "/opt/apps/maplecroft/versions/current/websites/maplecroft/urls.py", line 2, in <module>
    from maplecroft.views import RiskAtlasesLandingView
  File "/opt/apps/maplecroft/versions/current/maplecroft/views.py", line 40, in <module>
    import maplecroft.search as _search
  File "/opt/apps/maplecroft/versions/current/maplecroft/search.py", line 71, in <module>
    class MaplecroftSearchForm(SearchForm):
  File "/opt/apps/maplecroft/versions/current/maplecroft/search.py", line 111, in MaplecroftSearchForm
    choices=model_choices(),
  File "/opt/apps/maplecroft/versions/current/maplecroft/search.py", line 57, in model_choices
    for category in reversed(Category.objects.filter(parent=None)):
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/db/models/query.py", line 77, in __len__
    self._fetch_all()
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/db/models/query.py", line 857, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/db/models/query.py", line 220, in iterator
    for row in compiler.results_iter():
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 713, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 786, in execute_sql
    cursor.execute(sql, params)
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/db/backends/util.py", line 69, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute
    return self.cursor.execute(sql, params)
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/db/utils.py", line 99, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute
    return self.cursor.execute(sql, params)
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 124, in execute
    return self.cursor.execute(query, args)
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/MySQLdb/cursors.py", line 174, in execute
    self.errorhandler(self, exc, value)
  File "/opt/envs/maplecroft/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
OperationalError: (2006, 'MySQL server has gone away')

但是,如果我下降到 --workers=1 一切似乎都运行顺利,所以我目前的想法是,这是gunicorn 的线程工作人员功能的问题?

编辑:我刚刚尝试将 Gunicorn 升级到最新版本(0.17.2),但这似乎没有产生任何影响。

我想知道这个问题是否:https://serverfault.com/questions/407612/error-2006-mysql-server-has-gone-away是相关的,但很难将其与我当前的问题叠加

最佳答案

看来它毕竟是gunicorn版本 - 我尝试升级gunicorn,但仍在使用django-admin.py run_gunicorn启动服务器的方法。升级gunicorn并切换到未弃用的gunicorn wsgi:application方法解决了这个问题。

关于mysql - Django 1.6 w/gunicorn - 操作错误 : (2006, 'MySQL server has gone away' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31701939/

相关文章:

python - 在我的 Django Digital Ocean 服务器上的什么位置设置环境变量?

mysql - 使用多个连接优化 MySQL 查询

javascript - 发送多个 SKU 和数量以从 php strip 化

python - 向 Django 添加自定义语言

python - 过滤 Django 反向引用

python - 捕获 Django views.py 中的所有 URL 参数?

python - 我需要使用 apache 或 nginx 来托管服务器吗?

mysql - #2002 - - 服务器没有响应(或本地服务器的套接字配置不正确)

php - 在 CakePHP 中按 1 更新行

django - 如何在 Django 中记录请求和响应?