big*_*ner 1 python django docker docker-compose
我正在尝试为生产准备 Django 应用程序。我创建了一个备用 docker-compose YML 文件,其中指定 DEBUG=0。但是,当我运行 django 检查部署时,它说 DEBUG 设置为 True。
对我哪里出错有什么想法吗?我认为这是我使用 Docker 的问题。但这可能是我使用 Django 的方式有问题吗?
这是我的步骤:
$ docker-compose down
$ docker-compose -f docker-compose-prod.yml up -d --build
$ docker-compose exec web python manage.py check --deploy
Run Code Online (Sandbox Code Playgroud)
?: (security.W018) You should not have DEBUG set to True in deployment.迄今为止的一些调查步骤:
A.检查环境变量。
$ docker-compose exec web python
>>> import os
>>> os.environ.get('DEBUG')
'0'
Run Code Online (Sandbox Code Playgroud)
B. 尝试以不同方式重建 docker 镜像,例如使用 --no-cache 标志
C. 在条件代码块中的settings.py 中设置DEBUG 标志(而不是使用os.environ.get)。这似乎有效。但我不明白为什么?代码详情如下。
代码摘录
services:
web:
...
environment:
- ENVIRONMENT=development
- SECRET_KEY=randomlongseriesofchars
- DEBUG=1
Run Code Online (Sandbox Code Playgroud)
services:
web:
...
environment:
- ENVIRONMENT=production
- SECRET_KEY=anotherrandomlongseriesofchars
- DEBUG=0
Run Code Online (Sandbox Code Playgroud)
ENVIRONMENT = os.environ.get('ENVIRONMENT', default='production')
SECRET_KEY = os.environ.get('SECRET_KEY')
DEBUG = os.environ.get('DEBUG', default=0) #How is DEBUG being set to True?
...
if ENVIRONMENT == 'production':
[Various settings for production]
[Putting DEBUG=0 in this conditional block works]
Run Code Online (Sandbox Code Playgroud)
环境变量是字符串,因此结果os.environ.get()是字符串。
如果代码首先期望变量为 int、boolean 等(而不是字符串),则可能会失败。或者,尝试转换为所需的类型,这可能与所需的结果不同。
即,如果转换为布尔值,则只有空字符串才会产生False.
因此,可能的选择是:
| 归档时间: |
|
| 查看次数: |
1113 次 |
| 最近记录: |