You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows本地Elixir运行时如何正确获取环境变量?

Windows下Elixir项目正确获取环境变量的解决方案

问题根源

  • env.bat里的set命令仅在执行该bat的当前CMD会话生效,若未提前执行bat就启动项目,变量无法被读取。
  • config.exs是编译阶段读取配置,一旦项目编译完成,后续修改环境变量不会更新已固化的配置。

方案1:手动加载环境变量后启动项目

  • 打开CMD窗口,先执行环境变量脚本:call env.bat(必须用call,否则执行完bat会直接退出会话)
  • 保持当前CMD窗口不变,运行mix phx.server,此时环境变量会被会话继承,System.get_env就能正常读取。

方案2:用runtime.exs处理运行时配置(本地开发也适用)

别被“生产环境专属”的误解限制,runtime.exs本来就是用于实时读取运行时配置的,本地开发完全可以用:

  1. 在config/runtime.exs中添加配置:
import Config

# 读取环境变量,默认值设为"false"避免nil
config :app, :enable, System.get_env("ENABLE_XXX") || "false"
  1. 注释或删除config.exs中对应的enable配置项,避免冲突。
  2. 直接启动项目,配置会在启动时实时读取环境变量,无需重新编译。

方案3:用dotenv库自动加载本地环境变量

如果不想每次手动执行bat,用dotenv_elixir库更省心:

  1. 在mix.exs的依赖中添加:
defp deps do
  [
    {:dotenv_elixir, "~> 3.0", only: [:dev, :test]}
  ]
end
  1. 运行mix deps.get安装依赖。
  2. 在项目根目录创建.env文件,写入:
ENABLE_XXX=true
  1. 直接执行mix phx.server,库会自动加载.env里的变量到当前会话。

验证步骤

  • 先在CMD中执行echo %ENABLE_XXX%,确认变量已成功设置。
  • 也可以在Elixir代码中临时添加IO.inspect(System.get_env("ENABLE_XXX")),排查是变量未加载还是配置读取的问题。

内容的提问来源于stack exchange,提问作者indhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:40:21