【问题标题】:Python mod_wsgi database connection not workingPython mod_wsgi 数据库连接不起作用
【发布时间】:2014-05-20 10:07:45
【问题描述】:

我在 centos 系统上安装了 Postgres、mod_wsgi 和 python3.5。我已经测试了连接,它在交互式 Python shell 和开发应用程序中都能正常工作(它是一个 Pyramid 应用程序,因此它是开发服务器)。

我收到以下错误:

postgresql.exceptions.ClientCannotConnectError: could not establish connection to server
  CODE: 08001
  LOCATION: CLIENT
CONNECTION: [failed]
  failures[0]:
    socket('127.0.0.1', 5432)
    Traceback (most recent call last):
      File "/var/www/wsgi/lib/python3.3/site-packages/postgresql/protocol/client3.py", line 136, in connect
        self.socket = self.socket_factory(timeout = timeout)
      File "/var/www/wsgi/lib/python3.3/site-packages/postgresql/python/socket.py", line 64, in __call__
        s.connect(self.socket_connect)
    PermissionError: [Errno 13] Permission denied
    The above exception was the direct cause of the following exception:
    postgresql.exceptions.ConnectionRejectionError: Permission denied
      CODE: 08004
      LOCATION: CLIENT
CONNECTOR: [Host] pq://username:***@localhost:5432/db_name
  category: None
DRIVER: postgresql.driver.pq3.Driver

我花了一些时间查看 mod_wsgi 文档,发现有一个possible issue with sockets。但是,我已经实现了该更改(并且来自 apache 的相应错误消失了)。

我的假设是它仍然是一个套接字错误,因为连接字符串在同一个 Python 安装的其他地方甚至在开发设置中都可以正常工作。

有人可以从这里指出正确的方向吗?

【问题讨论】:

  • 所以它适用于开发配置,但不适用于生产配置?
  • 这些可能很明显:两个实例是否以同一用户身份运行?锁定/套接字位置的权限是您期望的以及它们应该是什么?作为快速测试(如果安全),将这些目录的权限更改为完全访问。还要确保在开发模式下使用预期的所有者/组和权限创建 UNIX 套接字。
  • @daveydave400 两个配置中的连接字符串相同,不同之处在于脚本的调用方式。我做了一个“chmod -R 777 wsgi”,恐怕我得到了一个相同的错误。

标签: python postgresql mod-wsgi pyramid


【解决方案1】:

即使您将数据库连接字符串设置为 IP 地址,如果它是 127.0.0.1,我也遇到过 PostgreSQL 数据库连接器,它会尝试优化并通过本地 UNIX 套接字进行连接。如果使用 mod_wsgi 运行您的代码的用户无法访问该 UNIX 套接字来访问 PostgreSQL,它将失败并出现权限错误。

我不记得我看到的是否是 py-postgresql 模块,但几周前确实使用了 PostgreSQL 数据库模块。

尝试将 127.0.0.1 替换为实际主机名或正确的 IP 地址。

【讨论】:

    猜你喜欢
    • 2016-01-31
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2013-01-25
    相关资源
    最近更新 更多