我在docker芹菜容器中使用dotenv
容器具有以下代码
在两次运行之间,我将.env1的内容从LOGGING_CONF_FILE=logging1.yaml
至LOGGING_CONF_FILE=logging2.yaml
然后,我触摸文件__init__.py
,该文件触发应用程序的重新加载
我希望在控制台中看到:LOGGING_CONF_FILE10 logging2.yaml
,但我仍然看到LOGGING_CONF_FILE10 logging1.yaml
如果我再次触摸文件__init__.py
(这触发了应用程序的另一次重新加载(,我确实在控制台中看到了:LOGGING_CONF_FILE10 logging2.yaml
- 为什么dotenv没有立即获取.env1文件中的更改
- 此外,为什么";os.unsenv";以及";os.putenv";没有取消设置变量?当我打印LOGGING_CONF_FILE的值时,我得到了一些值(在空字符串上没有定义(
感谢
cat .env1
...
LOGGING_CONF_FILE=logging1.yaml
def create_app(config_class=Config):
print( 'BEG create_app' )
app = Flask(__name__)
# app.app_context().push()
app.config.from_object(config_class)
from app.errors import bp as errors_bp
app.register_blueprint(errors_bp)
db.init_app(app)
mail.init_app(app)
bootstrap.init_app(app)
pagedown.init_app(app)
migrate.init_app(app, db)
# auth = HTTPBasicAuth()
# auth_token = HTTPBasicAuth()
login.init_app(app)
class ContextTask(celery.Task):
def __call__(self, *args, **kwargs):
with app.app_context():
return self.run(*args, **kwargs)
celery.conf.update(app.config)
celery.Task = ContextTask
...
问题是在两个地方调用了load_dotenv
在第一次/第二次调用中,它是在没有/有选项"的情况下调用的;override=True">
两个load_dotenv调用相互竞争,其中第一个调用接受现有的os变量,另一个调用超过了它们
这导致环境变量的值不可预测