如何在 Erlang/OTP 中使用 application:get_env()?
Posted
技术标签:
【中文标题】如何在 Erlang/OTP 中使用 application:get_env()?【英文标题】:How to use application:get_env() in Erlang/OTP? 【发布时间】:2011-05-05 23:15:37 【问题描述】:我创建了一个 mochiweb 实例
src/
|-- Makefile
|-- room.erl
|-- myserver.app
|-- myserver.erl
|-- myserver_app.erl
|-- myserver_deps.erl
|-- myserver_sup.erl
|-- myserver_web.erl
`-- uuid.erl
在myserver_web.erl
我可以访问应用程序配置
ok, "0.0.1" = application:get_key(vsn),
但是在room.erl
中,我无法访问应用程序配置(特别是env
列表)。
undefined = application:get_key(vsn),
主管没有启动房间,我也不想要它。
我是 OTP 的新手,我意识到我可能在做一些愚蠢的事情,但我非常感谢任何人的帮助。
干杯!
【问题讨论】:
【参考方案1】:我想通了...答案很愚蠢,我觉得发帖很愚蠢,但我希望其他人可以从我这里受益。
我实际上做的一切都是正确的(就像所有其他答案一样),但我使用的是 mochiweb 的自动 reloader 并没有真正停止服务器。一旦我这样做了,一切都很好。
DOH!对不起!
【讨论】:
【参考方案2】:来自the Erlang documentation about the application:get_key/1-2 function:
返回应用程序的值 规范键 应用程序键。 如果应用程序参数是 省略,默认为 调用进程的应用。
my_server_web.erl 的应用是什么? room.erl有什么应用?
如果指定的应用程序不是 加载,或规范键 不存在,或者如果进程正在执行 通话不属于任何 应用程序,函数返回 未定义。
是否指定了密钥?是否已加载应用程序?
关于“env”键,您可以使用the application:get_env/1 function。
【讨论】:
+1 用于显示文档。理解为什么会有很大帮助?!【参考方案3】:请改用get_key(myserver, vsn)
。请注意,需要先加载应用程序。
【讨论】:
啊,我忘了提,但我也这样做了......但仍然未定义。我使用了 application:load(myserver) 并且我得到了一个它已经加载的错误。我使用 application:get_key(myserver, vsn) 仍然未定义....以上是关于如何在 Erlang/OTP 中使用 application:get_env()?的主要内容,如果未能解决你的问题,请参考以下文章
您如何设计基于Erlang / OTP的分布式容错多核系统的架构?
如何在 Erlang/OTP 中将主管的孩子 pid 共享给另一个孩子