【发布时间】:2026-01-18 06:30:02
【问题描述】:
我刚刚开始使用 Phoenix,我注意到在我生成的应用程序中同时存在 prod.exs 和 prod.secret.exs 文件。但是,prod.secret.exs 文件中加载的秘密值来自环境变量,实际上并没有提交到 repo。如果是这种情况,是否需要 prod.secret.exs 文件?我可以从prod.exs 中的环境变量中加载所有内容并收工吗?
【问题讨论】:
我刚刚开始使用 Phoenix,我注意到在我生成的应用程序中同时存在 prod.exs 和 prod.secret.exs 文件。但是,prod.secret.exs 文件中加载的秘密值来自环境变量,实际上并没有提交到 repo。如果是这种情况,是否需要 prod.secret.exs 文件?我可以从prod.exs 中的环境变量中加载所有内容并收工吗?
【问题讨论】:
prod.secret.exs 是在我们为发布提供易于使用的运行时配置之前管理机密的另一种方法。我相信现在它是一种遗产。
我将其作为答案而不是评论的原因是愿意声明elixir 世界中的约定几乎为零,[几乎] 一切都是明确完成的。
.exs是一个脚本文件,默认不被mix编译,不像.ex文件。 prod.secret.exs 可能被命名为 foo.bar.baz.exs,phoenix-framework 使用它的唯一原因是它是从 prod.exs 显式加载的。
反过来,由于config.exs 有一行import_config("#{Mix.env()}.exs"),后者会被加载。
也就是说,对于elixir 和phoenix-framework 的现代版本,人们可能会坚持使用系统环境配置和runtime release configuration。没有强制开发人员使用 prod.secret.exs 的约定,而且从未使用过(尽管如此,此文件仍由特定于 env 的配置显式加载。)
【讨论】: