我在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安装的其他地方工作正常,甚至在开发设置中也是如此。
有人可以从这里指出我正确的方向吗?
答案 0 :(得分:3)
即使您将数据库连接字符串设置为IP地址,如果它是127.0.0.1,我也遇到了PostgreSQL数据库连接器,它将尝试优化并通过本地UNIX套接字进行连接。如果使用mod_wsgi运行代码的用户无法访问该UNIX套接字以访问PostgreSQL,则会因权限错误而失败。
我不记得是否是我看到过的py-postgresql模块,但几周之前发布了PostgreSQL数据库模块。
尝试将127.0.0.1替换为实际的主机名或正确的IP地址。