在我的源代码(使用Docker)中,有一个数据库和我的django代码。
docker-compose.yml
services:
app:
db:在本地调试时,通常会删除中的数据库,以防止它在本地创建新数据库。然后更改django源代码中的设置,以连接到服务器的数据库。
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': 123.231.***,
'NAME': db***,
'USER': ****,
'PASSWORD': ****
}
}或者,当我开发一个新特性时,我更愿意在本地创建一个数据库来测试我们的东西,而不是直接连接到服务器数据库。
好吧,我的问题是如何设置,以便我们可以轻松地切换之间的dev/ prod/调试模式。
在我看来,这应该像命令一样简单:
python manage.py run dev-mode发布于 2021-08-13 05:06:48
在项目根目录中创建设置文件夹,并创建4个文件:_base.py、dev.py、test.py、prod.py
将所有设置从原始的_base.py移动到settings.py (并删除它)。然后,在每个剩余的设置中,文件创建您的环境特定的信任。
对于exapmle:
settings/_base.py
### import statements
BASE_DIR = Path(__file__).resolve().parent.parent.parent
def get_secret(setting):
"""Get the secret variable or return explicit exception."""
try:
return os.environ[setting]
except KeyError:
error_msg = f'Set the {setting} environment variable'
raise ImproperlyConfigured(error_msg)
### other settings settings/dev.py
from ._base import *
DEBUG = True
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': get_secret('DATABASE_NAME'),
'USER': get_secret('DATABASE_USER'),
'PASSWORD': get_secret('DATABASE_PASSWORD'),
'HOST': 'db',
'PORT': '5432',
}
}然后分别为不同的环境创建脚本dev/test/prod。考虑到你用的是码头作曲。下面是开发环境build_dev.sh的示例
#!/usr/bin/env bash
DJANGO_SETTINGS_MODULE=my_project.settings.dev \
DJANGO_SECRET_KEY='super_secret_django_key' \
DATABASE_NAME=my_db \
DATABASE_USER=my_db_user \
DATABASE_PASSWORD="my_db_user_password" \
docker-compose up --detach以这种方式,您只需要执行必要的脚本,就这样
发布于 2021-08-13 04:47:05
我使用了两个不同的设置文件和所需的配置-
)
现在,我还创建了一个名为 manage.py 文件的副本,名为local.py,并通过更改manage.py中的以下代码行将其连接到dev_settings.py
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.dev_settings')因此,每当我在本地运行我的应用程序时,我就使用
python local.py makemigrations或
python local.py runserver发布于 2021-08-13 08:06:39
仅仅这样做有什么不对:
if DEBUG:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
else:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": os.getenv("POSTGRES_DB"),
"USER": os.getenv("POSTGRES_USER", "hello"),
"PASSWORD": os.getenv("POSTGRES_PASSWORD", "password"),
"HOST": os.getenv("POSTGRES_HOST", "localhost"),
"PORT": os.getenv("POSTGRES_PORT", "5432"),
}
}https://stackoverflow.com/questions/68766668
复制相似问题