Python mod_wsgi数据库连接无法正常工作

时间:2014-04-07 23:04:12

标签: python postgresql mod-wsgi pyramid

我在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的相应错误消失了。)

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

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

1 个答案:

答案 0 :(得分:3)

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

我不记得是否是我看到过的py-postgresql模块,但几周之前发布了PostgreSQL数据库模块。

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