用途:在 Phoenix 1.8 应用的每个 HTML 页面顶部添加一条“非生产环境”粘性横幅,让开发者一眼看出当前不是生产环境(本地开发或非生产部署)。
前置条件:Phoenix 1.8 且使用 HEEx 布局(存在嵌入 layouts/* 的 *Web.Layouts 模块);至少一个含 <body> 的根布局(如 root.html.heex);Tailwind CSS(daisyUI 可选)。
主要能力与流程:先做 Phase 0 发现,搜索 lib/ 中是否已有 env_banner / show_env_banner,定位嵌入 templates 的 Layouts 模块、所有根布局、固定或粘性的顶部元素,并从 runtime.exs / fly.toml 读取 PHX_HOST。随后选择检测策略:基于主机(推荐,端点 host 等于生产主机时隐藏)或基于 Mix 环境(如 Application.get_env(:my_app, :env) != :prod 时显示),并配置横幅文案、是否可关闭。
使用方式:在 config/config.exs 增加 config :my_app, :production_host, "example.com"(或 config :my_app, :env, config_env());在 Layouts 模块的 embed_templates 之后加入 env_banner/1、公开的 show_env_banner?/0 与私有的 env_banner_label/0;在每个根布局的 <body> 内首个子元素处插入 <.env_banner />。若存在固定或粘性顶部栏,需用 show_env_banner?/0 条件性地添加 top-7 之类的偏移,避免被横幅遮挡。最后 mix compile、mix phx.server 本地验证,并确认固定元素位于横幅下方。
限制:需按实际 OTP 应用名与 Web 模块名替换示例中的 my_app / MyAppWeb;示例样式类 bg-warning / text-warning-content 依赖 daisyUI,无 daisyUI 时需换为普通 Tailwind;<.icon> 依赖 Phoenix 默认 icon 组件,缺失时应移除。生产主机、是否可关闭等具体取值需由使用者确认,资料未提供默认生产域名等更多细节。