22 September 2013

Я развернул свой проект на Django в окружении Nginx+Gunicorn+PostgreSQL, после чего у меня появились проблемы со всеми запросами, которые обращаются к БД. Запросы падали с ошибкой OperationalError: no connection to the server, хотя сервер БД находился на той же физической машине, и проблем с доступом не было. Самым странным было то, что сбои происходили не всегда, а с некоторой вероятностью.

Я долго пытался нагуглить решение этой проблемы, но нашёл только это. Автор рекомендует добавить следующие строки в конфиг для gunicorn:

from django.db import close_connection
def pre_fork(server, worker):
    close_connection()

Ссылка на официальную документацию.

Вот как выглядит мой gunicorn.conf.py:

bind = "127.0.0.1:8080"
worker_class = "sync"
workers = 10
max_requests = 5000
loglevel = "info"
proc_name = "gunicorn"
accesslog = "/var/log/django/gunicorn_access.log"
errorlog = "/var/log/django/gunicorn_error.log"

from django.db import close_connection
def pre_fork(server, worker):
    close_connection()


blog comments powered by Disqus

Fork me on GitHub