首页 > 解决方案 > django // 条件设置取决于 aws 实例服务器

问题描述

环境

django 2.2

蟒蛇3.6

AWS EC2 ubuntu 实例

独角兽

nginx


我的设置

现在我正在使用一个生产服务器 aws ubuntu 实例。

settings.py在本地和生产服务器上分离了 depond,如下所示。

# 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")

我必须使用另一个 api url 取决于真实或测试。

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

我如何能?

标签: pythondjangoamazon-ec2amazon-rds

解决方案


我成功解决了这个问题,所以我分享解决方案。

我为每个服务器放置了相同键和不同值的环境变量,并在环境变量为“测试”时将“设置”用于“测试”。

# 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")


推荐阅读