django // условные настройки зависят от aws сервера экземпляра - PullRequest
1 голос
/ 13 апреля 2020

Окружающая среда

django 2.2

python 3.6

AWS Экземпляр EC2 Ubuntu

gunicorn

nginx


Мои настройки

Теперь я использую один рабочий сервер aws Экземпляр Ubuntu.

Я отделил settings.py Отложено на локальном и производственном сервере

# local : Project/setting/dev.py
DEBUG = True
ALLOWED_HOSTS = ['localhost']
database = {
    ..skip..
}


# production : Project/setting/real.py
DEBUG = False
ALLOWED_HOSTS = ['~real_server_host of ec2~']
database = {
    ..AWS RDS instance for real..
}


# manage.py
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Project.settings.dev")

# wsgi.py
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Project.settings.real")


Вопрос

Мне нужно задействовать еще один aws экземпляр для теста перед развертыванием в режиме реального времени.

Таким образом, я сделал один и тот же экземпляр EC2 и экземпляр RDS (выгруженный из реальных rds) для теста.

Но у меня нет никакой хорошей идеи, как разделить os.environ.setdefault на wsgi.py

После того, как я сделал еще один файл настроек для тестового сервера.

# Project/setting/test.py
DEBUG = True
ALLOWED_HOSTS = ['~test_server_host of ec2~']
database = {
    ..AWS RDS instance for test..
}

Я ожидаю, что код ниже будет работать.

# wsgi.py
if realserver:
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Project.settings.real")
else:
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Project.settings.test")

, и мне придется использовать другой URL-адрес API, в зависимости от реального или тестового .

# views.py
if real:
   get_data = requests.get(real_api.apiurl.com)
else :
   get_data = requests.get(test_api.apiurl.com)

Как мне?

1 Ответ

0 голосов
/ 21 апреля 2020

Я успешно решил проблему, поэтому я разделяю решение.

Я помещаю переменные среды с одинаковым ключом и разными значениями для каждого сервера и использую «настройки» для «ТЕСТ», когда переменная среды имеет значение « тест ".

# wsgi.py

try:
    test = os.environ['IS_ENV']
    if test == 'test':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Project.settings.prod_test")
    else:
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Project.settings.prod_eb")
except KeyError:
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Project.settings.prod_eb")

...