【问题标题】:django.db.utils.OperationalError: could not connect to server: No such file on Unix domain socket "/tmp/.s.PGSQL.5432"?django.db.utils.OperationalError:无法连接到服务器:Unix 域套接字“/tmp/.s.PGSQL.5432”上没有这样的文件?
【发布时间】:2020-11-14 12:29:15
【问题描述】:

当我将Postgres 数据库与Django 连接时,它给了我以下错误(也附有屏幕截图)。当我使用直接数据库名称或用户等时,这工作正常,但当我通过环境变量使用时,它不起作用。

这是我的 setting.py 文件:

'ENGINE': 'django.db.backends.postgresql_psycopg2',

        'NAME': os.environ.get('DATABASE_NAME'),
        'USER': os.environ.get('DATABASE_USER'),
        'PASSWORD': os.environ.get('DATABASE_PASSWORD'),
        'HOST': os.environ.get('DATABASE_HOST'),
        'PORT': 5432
    this is my .bash_profile enviroment variable
    
     export DATABASE_NAME='blog'
     export DATABASE_USER='bloguser'
     export DATABASE_PASSWORD='blog@123'
     export DATABASE_HOST='localhost'

错误本身:

    self.connection = self.get_new_connection(conn_params)
  File "/home/kamran/anaconda3/envs/DjangoEnv/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/home/kamran/anaconda3/envs/DjangoEnv/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

以及附图:https://i.stack.imgur.com/fqrZQ.png

【问题讨论】:

  • 我会说使用pdb(类似于import pdb; pdb.set_trace())并在连接数据库之前检查环境变量是否正确。
  • 请解释一下
  • 试图在下面的正确答案中解释它。

标签: django database postgresql environment-variables django-settings


【解决方案1】:

PostgreSQL 未运行或未正确配置。

更改文件/etc/postgresql/{version_number}/main/postgresql.conf中的listen_address localhost to *

listen_addresses = '*'

pg_hba.conf 中,在# IPv4 local connections 中添加以下行:

host    all             all             0.0.0.0/0               md5

【讨论】:

  • 但是当我直接给出用户名、密码和主机等时,它就可以正常工作了
【解决方案2】:

当然,您可以转到代码并将pdb 放在self.connection = self.get_new_connection(conn_params) 行之前,例如:

import pdb; pdb.set_trace()
self.connection = self.get_new_connection(conn_params)

运行服务器,一旦到达pdb 行,您就可以在运行时模式下与代码进行交互,它会向您显示pdb 控制台,然后您可以查看是否设置了该环境变量:

(pdb) p os.environ.get('DATABASE_NAME')
(pdb) p os.environ.get('DATABASE_USER')
...

它将允许您查看变量是否已设置以及是否具有正确的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多