【问题标题】:Cursor (SQL) - break the connection after deployment of website to remote server光标 (SQL) - 将网站部署到远程服务器后断开连接
【发布时间】:2018-10-23 11:47:56
【问题描述】:

部署我的网站(Django + NGINX + uwsgi)后,我遇到了 SQL 连接问题。当我第一次运行 wscgi 时,在退出较早的实例后,该站点通过 Web 浏览器正确加载(建立 SQL 连接,并执行查询,我得到一个结果)。转到下一个站点(应该执行下一个查询)后,我收到如下错误:

[pid: 26143|app: 0|req: 1/1] 2001:470:70:f5f::2 () {58 vars in 1057 bytes} [Sun May 13 19:03:54 2018] GET /index/ => generated 270 bytes in 712 msecs (HTTP/1.0 200) 4 headers in 123 bytes (1 switches on core 0)
[pid: 26143|app: 0|req: 2/2] 2001:470:70:f5f::2 () {56 vars in 1044 bytes} [Sun May 13 19:04:07 2018] GET /accounts/login/ => generated 634 bytes in 41 msecs (HTTP/1.0 200) 7 headers in 380 bytes (1 switches on core 0)
[pid: 26143|app: 0|req: 3/3] 2001:470:70:f5f::2 () {60 vars in 1170 bytes} [Sun May 13 19:04:17 2018] POST /accounts/login/ => generated 0 bytes in 2570 msecs (HTTP/1.0 302) 9 headers in 531 bytes (1 switches on core 0)
Internal Server Error: /index/
Traceback (most recent call last):
  File "/root/Env/pyrat/lib/python3.5/site-packages/django/db/backends/utils.py", line 83, in _execute
    return self.cursor.execute(sql)
psycopg2.InterfaceError: cursor already closed

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/root/Env/pyrat/lib/python3.5/site-packages/django/core/handlers/exception.py", line 35, in inner
    response = get_response(request)
  File "/root/Env/pyrat/lib/python3.5/site-packages/django/core/handlers/base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/root/Env/pyrat/lib/python3.5/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/root/Env/pyrat/pyrat_server/views.py", line 28, in index
    dbquery.execute('SELECT * FROM users')
  File "/root/Env/pyrat/lib/python3.5/site-packages/django/db/backends/utils.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/root/Env/pyrat/lib/python3.5/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/root/Env/pyrat/lib/python3.5/site-packages/django/db/backends/utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "/root/Env/pyrat/lib/python3.5/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/root/Env/pyrat/lib/python3.5/site-packages/django/db/backends/utils.py", line 83, in _execute
    return self.cursor.execute(sql)
django.db.utils.InterfaceError: cursor already closed
[pid: 26143|app: 0|req: 4/4] 2001:470:70:f5f::2 () {56 vars in 1079 bytes} [Sun May 13 19:04:20 2018] GET /index/ => generated 27 bytes in 784 msecs (HTTP/1.0 500) 4 headers in 126 bytes (1 switches on core 0)

该数据库位于大象SQL (Postgres) 上。当我在本地主机上尝试应用程序时 - 没有问题。有人遇到过这类问题吗?

【问题讨论】:

    标签: django postgresql nginx uwsgi


    【解决方案1】:

    如果有人有类似的问题 - 在我的本地主机上,一个与数据库的连接就足够了(一开始)。在此之后,我可以进行每个查询,并且连接没有问题。不幸的是,每次在远程主机(服务器)上查询之前,都应该建立与数据库的新连接。下面是我使用的代码:

    def db_fetchall(query):
        try:
            dbquery = connection.cursor()
            dbquery.execute(query)
        except InterfaceError:
            dbquery.close()
            dbquery = connection.cursor()
            dbquery.execute(query)
        return dbquery.fetchall()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多