簡體   English   中英

Dynaconf 用 .secrets.toml 覆蓋 settings.toml 中的部分

[英]Dynaconf overwrites sections at settings.toml with .secrets.toml

我正在使用 Dynaconf (3.1.2) 來處理我的 python 應用程序設置。

如果我在settings.toml.secrets.toml使用相同的密鑰,則這些部分最后只有來自機密文件的值,而不再有來自設置文件的值。 我該如何處理?

我有以下設置:

# settings.toml
[smtp]
host = "mail.myserver.com"
port = 587
username = "me@myserver.com"
# .secrets.toml
[smtp]
password = "mysecretpassword"

當我嘗試獲取 settings.smtp.host 時,出現以下異常:

dynaconf.vendor.box.exceptions.BoxKeyError: "'DynaBox' object has no attribute 'HOST'"

在調試設置對象時可以看到:

'SMTP': <Box: {'password': 'mysecretpassword'}>

您需要允許合並。 Dynaconf 將在加載文件時覆蓋配置。 在您的情況下, settings.toml的內容將被.secrets.toml覆蓋,因為它是在settings.toml之后加載的。

為避免這種情況,您可以啟用dynaconf_merge

# settings.toml
[smtp]
host = "mail.myserver.com"
port = 587
username = "me@myserver.com"
# .secrets.toml
[smtp]
dynaconf_merge = true
password = "mysecretpassword"

這會將您的smtp對象從.secrets.toml合並到settings.toml並且不會覆蓋。

您還可以啟用全局合並,例如

# .secrets.toml
dynaconf_merge = true
[smtp]
password = "mysecretpassword"

這將在所有對象合並.secret.toml與在同一名稱的對象settings.toml

參考: https : //www.dynaconf.com/merging/#local-configuration-files-and-merging-to-existing-data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM