我正在使用 Dynaconf (3.1.2) 来处理我的 python 应用程序设置。
settings.toml如果我在at 和 at使用相同的密钥.secrets.toml,则这些部分最后仅包含机密文件中的值,而不再包含设置文件中的值。我该如何处理这个问题?
我有以下设置:
# settings.toml
[smtp]
host = "mail.myserver.com"
port = 587
username = "me@myserver.com"
Run Code Online (Sandbox Code Playgroud)
# .secrets.toml
[smtp]
password = "mysecretpassword"
Run Code Online (Sandbox Code Playgroud)
当我尝试获取 settings.smtp.host 时,出现以下异常:
dynaconf.vendor.box.exceptions.BoxKeyError: "'DynaBox' object has no attribute 'HOST'"
Run Code Online (Sandbox Code Playgroud)
在调试设置对象时可以看到:
'SMTP': <Box: {'password': 'mysecretpassword'}>
Run Code Online (Sandbox Code Playgroud)
您需要允许合并。Dynaconf 将在加载文件时覆盖配置。在您的情况下, 的内容settings.toml将被覆盖,.secrets.toml因为它是在 后加载的settings.toml。
为了避免这种情况,您可以启用dynaconf_merge.
# settings.toml
[smtp]
host = "mail.myserver.com"
port = 587
username = "me@myserver.com"
Run Code Online (Sandbox Code Playgroud)
# .secrets.toml
[smtp]
dynaconf_merge = true
password = "mysecretpassword"
Run Code Online (Sandbox Code Playgroud)
这会将您的smtp对象从合并.secrets.toml到settings.toml,并且不会覆盖。
您还可以启用全局合并,例如
# .secrets.toml
dynaconf_merge = true
[smtp]
password = "mysecretpassword"
Run Code Online (Sandbox Code Playgroud)
这会将所有对象合并.secret.toml为具有相同名称的对象settings.toml
参考:https://www.dynaconf.com/merging/#local-configuration-files-and-merging-to-existing-data
| 归档时间: |
|
| 查看次数: |
1618 次 |
| 最近记录: |