django на AWS с несколькими файлами настроек - PullRequest
0 голосов
/ 24 марта 2020

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

Поэтому я решил иметь 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, супервайзере или оружейном? Я также использую эти 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': '5432'
    }
}

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

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

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

import socket

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

Спасибо

1 Ответ

1 голос
/ 24 марта 2020

Я решил эту проблему, используя имена хостов. У нас есть 1 файл настроек со всеми настройками по умолчанию. Затем мы импортируем указанные c файлы в зависимости от имени хоста. Конечно, вы также можете использовать такие вещи, как роли экземпляра 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', ...}}
...