如何在 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 共享给另一个孩子

您如何设计基于 Erlang/OTP 的分布式容错多核系统的架构?

如何安装特定版本的 Erlang/OTP?

Erlang/OTP 消息可靠吗?消息可以复制吗?

何时在 Erlang/OTP 应用程序中使用 gen_server