Django + FastCGI - randomly raising OperationalError

前端 未结 13 1133
忘掉有多难
忘掉有多难 2020-12-31 19:24

I\'m running a Django application. Had it under Apache + mod_python before, and it was all OK. Switched to Lighttpd + FastCGI. Now I randomly get the following exception (ne

相关标签:
13条回答
  • 2020-12-31 19:47

    The problem could be mainly with Imports. Atleast thats what happened to me. I wrote my own solution after finding nothing from the web. Please check my blogpost here: Simple Python Utility to check all Imports in your project

    Ofcourse this will only help you to get to the solution of the original issue pretty quickly and not the actual solution for your problem by itself.

    0 讨论(0)
  • In the switch, did you change PostgreSQL client/server versions?

    I have seen similar problems with php+mysql, and the culprit was an incompatibility between the client/server versions (even though they had the same major version!)

    0 讨论(0)
  • 2020-12-31 19:48

    I fixed a similar issue when using a geodjango model that was not using the default ORM for one of its functions. When I added a line to manually close the connection the error went away.

    http://code.djangoproject.com/ticket/9437

    I still see the error randomly (~50% of requests) when doing stuff with user login/sessions however.

    0 讨论(0)
  • 2020-12-31 19:50

    Why not storing session in cache? Set

    SESSION_ENGINE = "django.contrib.sessions.backends.cache"
    

    Also you can try use postgres with pgbouncer (postgres - prefork server and don't like many connects/disconnects per time), but firstly check your postgresql.log.

    Another version - you have many records in session tables and django-admin.py cleanup can help.

    0 讨论(0)
  • 2020-12-31 19:54

    I try to give an answer to this even if I'am not using django but pyramid as the framework. I was running into this problem since a long time. Problem was, that it was really difficult to produce this error for tests... Anyway. Finally I solved it by digging through the whole stuff of sessions, scoped sessions, instances of sessions, engines and connections etc. I found this:

    http://docs.sqlalchemy.org/en/rel_0_7/core/pooling.html#disconnect-handling-pessimistic

    This approach simply adds a listener to the connection pool of the engine. In the listener a static select is queried to the database. If it fails the pool try to establish a new connection to the database before it fails at all. Important: This happens before any other stuff is thrown to the database. So it is possible to pre check connection what prevents the rest of your code from failing.

    This is not a clean solution since it don't solve the error itself but it works like a charm. Hope this helps someone.

    0 讨论(0)
  • 2020-12-31 19:55

    An applicable quote:

    "2019 anyone?" - half of YouTube comments, circa 2019

    If anyone is still dealing with this, make sure your app is "eagerly forking" such that your Python DB driver (psycopg2 for me) isn't sharing resources between processes.

    I solved this issue on uWSGI by adding the lazy-apps = true option, which causes is to fork app processes right out of the gate, rather than waiting for copy-on-write. I imagine other WSGI / FastCGI hosts have similar options.

    0 讨论(0)
提交回复
热议问题