django //条件设置取决于AWS实例服务器

时间:2020-04-13 00:20:21

标签: python django amazon-ec2 amazon-rds

环境

django 2.2

python 3.6

AWS EC2 ubuntu实例

独角兽

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

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

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

我该怎么办?

1 个答案:

答案 0 :(得分:0)

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

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

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