python - 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)
我如何能?
解决方案
我成功解决了这个问题,所以我分享解决方案。
我为每个服务器放置了相同键和不同值的环境变量,并在环境变量为“测试”时将“设置”用于“测试”。
# 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")
推荐阅读
- reactjs - 添加两个没有操作按钮的数字 react.js(自动更新)
- c# - 单符号字节整数位顺序似乎颠倒了
- c++ - 如何创建 C API 到 C++ 函数
- django - 在 Django 中的多表继承的情况下,基础模型的多态查询是否可能?
- android - 在 API 上发送和保存 SQLiteDatabase 的最佳方式是什么?
- python - 无法在 Pycharm 上安装 Pandas,接收错误
- spring-integration - GlobalChannelInterceptor 传递模式数组
- typescript - 如何创建混合模式以将事件冒泡到继承层次结构中?
- python - 使用 Telegram Bot 按下按钮时如何返回命令
- php - 将数组转换为查询php