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

如何获取无关联模块的Elixir应用配置段?

获取Elixir应用的顶层无关联模块配置

嘿,你提的这个问题很常见,我来给你梳理一下解决办法!

首先,你说得没错,Application.get_env/1确实不存在,但我们有其他方法获取那些没有关联到具体模块的顶层配置:

方法1:使用Application.get_all_env/1获取全部配置

这个函数会返回指定应用的所有配置项,包括顶层的键值对和关联到模块的配置。比如针对你的配置:

config :my_app, a: 123, b: 456
config :my_app, MyApp.Endpoint, url: [host: "localhost"], secret_key_base: "fdsfdsfd"

你可以这样获取:

# 获取my_app的所有配置
all_config = Application.get_all_env(:my_app)

# 提取顶层的a和b的值
a_value = Keyword.get(all_config, :a) # => 123
b_value = Keyword.get(all_config, :b) # => 456

# 同时你也能拿到模块相关的配置,和之前一样
endpoint_config = Keyword.get(all_config, MyApp.Endpoint)

方法2:过滤出仅顶层配置

如果只想拿到没有关联模块的顶层配置,不想包含模块对应的配置,可以加个过滤:

top_level_config = Application.get_all_env(:my_app) 
                   |> Keyword.reject(fn {key, _} -> 
                     is_atom(key) and Module.exists?(key) 
                   end)
# 此时top_level_config就是 [a: 123, b: 456]

方法3:提前重构配置(推荐)

为了让配置结构更清晰,避免混淆,建议你把顶层配置放到一个专门的原子键下面,比如:

config :my_app, :app_global_settings, a: 123, b: 456

这样就能用熟悉的get_env直接获取:

cfg = Application.get_env(:my_app, :app_global_settings) # => [a: 123, b: 456]
a_value = cfg[:a] # => 123

这种方式不仅更直观,还能避免和模块名冲突,后期维护也更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:33