Django на AWS с несколькими файлами настроек

Ну, у меня был один файл настроек раньше, и он отлично работал как на локальном компьютере, так и на AWS, разумеется, с конфигурацией базы данных в одном файле настроек. Когда бы я ни использовал для отправки своего кода в AWS, я комментировал свою локальную конфигурацию БД, а затем нажимал. Так что, конечно, это раздражает. Я не могу постоянно комментировать и раскомментировать конфигурацию базы данных в одном файле.

Поэтому я решил иметь 2 установочных файла. один для местного и другой для AWS.

Однажды я вытащил код на сервер AWS и запустил миграцию.

python manage.py migrate --settings=settings.staging

Это работало и мигрировало. Кстати, это файл настроек, в котором находится моя конфигурация RDS. Теперь, когда я попал в конечную точку через postmant, вывод

OperationalError at /account/v1/login
could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?

означает, что он все еще читает файл настроек по умолчанию. Почему я заставляю сервер запускать этот конкретный файл настроек постановки? Должен ли я объявить это на nginx, supervisor или gunicorn? Я также использую эти 3 услуги.

Ниже мой файл настроек для постановки.

from .base import *

# --------------- AWS RDS ---------------
DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'db name here',
        'HOST': 'RDS host here',
        'USER': 'postgres',
        'PASSWORD': 'pass here',
        'PORT': 񠢨'
    }
}

Это мой полный файл staging.py. который имеет только это, в то время как остальная часть настройки импортируется из base.py, который является файлом настроек по умолчанию. Также он имеет локальные настройки.

Любые рекомендации?

Это тоже то, что я пробовал.

import socket

hostname = socket.gethostname()
if hostname == "staging":
     from settings.staging import *

Спасибо

Всего 1 ответ


Я решил эту проблему, используя имена хостов. У нас есть 1 файл настроек со всеми настройками по умолчанию. Затем мы импортируем определенные файлы в зависимости от имени хоста. Конечно, вы также можете использовать такие вещи, как роли экземпляра IAM или что-то в этом роде.

У нас будет это в файле настроек по умолчанию:

import socket
DATABASE = {'default': {'ENGINE': 'django.db.backends.sqlite3', ...}}
hostname = socket.gethostname()
if hostname == "staging-blabla"
    from staging import *

staging.py будет содержать следующее:

DATABASE = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', ...}}

Есть идеи?

10000