我正在开发一个 erlang 应用程序。我想从 src/ 文件夹中编译并运行一个 .erl 文件,该文件使用 .app.src 文件中的环境变量。
所以我的要求是在处理程序中添加 .app.src 文件并独立编译/运行 .erl 文件。如何达到同样的效果。
我正在开发一个 erlang 应用程序。我想从 src/ 文件夹中编译并运行一个 .erl 文件,该文件使用 .app.src 文件中的环境变量。
所以我的要求是在处理程序中添加 .app.src 文件并独立编译/运行 .erl 文件。如何达到同样的效果。
我的答案是对先前答案(何塞 M)的补充。想象一下处理程序模块(handler.erl)看起来像:
-module(handler).
-export([start/0]).
start() ->
R1 = application:load(dynconf),
io:format(user, "After app load. R2=~p~n", [R1]),
Test = application:get_env(dynconf, test),
io:format(user, "After config changed. Test=~p~n~n", [Test]).
和文件 dynconf.app (它定义空闲应用程序仅用于 env 元组定义):
{application,dynconf,
[{description,"dynamically (on fly) change configuration"},
{vsn,"0.0.1"},
{registered,[]},
{applications,[]},
{modules,[]},
{mod,{dynconf,[]}},
{env,[{test,7}]}]}.
然后在包含上述两个文件的文件夹中运行 Erlang shell:
1> c("handler.erl").
{ok,handler}
2> handler:start().
After app load. R2=ok
After config changed. Test={ok,7}
test
您从 dynconf.app 文件中获得了环境 var = 7。rebar 使用 dynconf.app.src 生成 dynconf.app 并将其复制到 ebin 文件夹。但是对于单独的 *.erl 文件(没有 rebar 项目),您可以自己手动创建 *.app 文件。
您可以使用application:load/1加载 .app 文件而不启动它。