settings.py无法在服务器端检索Django-Environ信息

dsekswqp  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(114)

我的问题

你好,我的网站从我的Django-envrion文件中获取信息到settings.py时出现问题。我能够在我的开发计算机上使用相同的配置完美地打开localhost:8000(只是将其设置为关闭并使用本地DB)。虽然当我 Boot 我的服务器时,我登录到postgres时遇到了问题,但尽管环境文件设置为0,调试也设置为on。还有一些奇怪的地方,它可能会获取数据库名称和数据库用户,因为这些都在环境文件中。
下面是显示的错误(尽管调试是关闭的,就像我之前提到的,虽然它可以读取一些属性,但我相信考虑到它知道什么数据库和用户的名称):

OperationalError at /

connection to server at "localhost" (::1), port 5432 failed: FATAL:  password authentication failed for user "DBuser"
connection to server at "localhost" (::1), port 5432 failed: FATAL:  password authentication failed for user "DBuser"

Request Method:     GET
Request URL:    https://[REDACTED].com/
Django Version:     4.2.3
Exception Type:     OperationalError
Exception Value:    

connection to server at "localhost" (::1), port 5432 failed: FATAL:  password authentication failed for user "DBuser"
connection to server at "localhost" (::1), port 5432 failed: FATAL:  password authentication failed for user "DBuser"

Exception Location:     /home/[REDACTED]/virtenv/lib/python3.10/site-packages/psycopg2/__init__.py, line 122, in connect
Raised during:  jobs.views.home
Python Executable:  /home/[REDACTED]/virtenv/bin/python
Python Version:     3.10.12
Python Path:    

['/home/[REDACTED]/WebPortfolio/portfolio_Proj',
 '/home/[REDACTED]/virtenv/bin',
 '/usr/lib/python310.zip',
 '/usr/lib/python3.10',
 '/usr/lib/python3.10/lib-dynload',
 '/home/[REDACTED]/virtenv/lib/python3.10/site-packages']

Server time:    Thu, 19 Oct 2023 01:02:58 +0000
Error during template rendering

In template /home/[REDACTED]/WebPortfolio/portfolio_Proj/jobs/templates/jobs/home.html, error at line 6
connection to server at "localhost" (::1), port 5432 failed: FATAL: password authentication failed for user "DBuser" connection to server at "localhost" (::1), port 5432 failed: FATAL: password authentication failed for user "DBuser"

尝试

因此,我试图解决这个问题的方法是尝试查看我的python环境是否与我的开发环境匹配,它确实匹配。

Package           Version
----------------- -------
asgiref           3.7.2
Django            4.2.3
django-environ    0.11.2
gunicorn          21.2.0
packaging         23.1
Pillow            10.0.0
pip               23.2.1
psycopg2-binary   2.9.6
setuptools        68.0.0
sqlparse          0.4.4
typing_extensions 4.7.1
wheel             0.40.0

接下来,我尝试将django-env文件中的信息硬编码到设置中。这样做很有效,所以我恢复了更改,并检查我的导入和django-env路径是否正确。下面是我的settings.py的一个片段:

import environ
import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

# Django Enviroment file path
env = environ.Env()
env.read_env(os.path.join(BASE_DIR, '.djenv/', '.host'))

SECRET_KEY = env("KEY")
DEBUG = env("DEBUG")
...
DATABASES = {
    'default': {
        'ENGINE':env('DB_ENGINE'),
        'NAME':env('DB_NAME'),
        'USER':env('DB_USER'),
        'PASSWORD':env('DB_PASS'),
        'HOST':env('DB_HOST'),
        'PORT':env('DB_PORT'),
    }
}

下面是我的django-env文件[proj_base_dir]/.djenv/.host

DEBUG=0
KEY=[REDACTED]
DB_ENGINE=django.db.backends.postgresql
DB_NAME=[REDACTED]
DB_USER=[REDACTED]
DB_PASS=[REDACTED]
DB_HOST=localhost
DB_PORT=5432

我觉得我错过了一些东西,但我对Django没有很强的把握。有人有什么想法吗?

luaexgnf

luaexgnf1#

在使用Django-Environ时,请确保您知道注解字符,例如#。如果你的用户名、密码或其他任何你试图从Django环境文件调用的东西,请确保不要使用#,因为它会注解掉后面的所有内容。或者,如果你必须使用#,请在它周围使用引号。
下面是一个示例:

DEBUG=1
SECRETPASS='agr!#eJ6CysoL*'

相关问题