我正在使用一个Erlang应用程序。我想编译并运行一个来自src/文件夹的.erl文件,该文件使用来自.app.src文件的环境变量。所以我的要求是在一个处理程序中添加.app.src文件,并独立编译/运行.erl文件。如何实现同样的功能。
p1iqtdky1#
您可以使用application:load/1来载入.app档案,而不启动它。
sirbozc52#
我的答案是对前面的答案(Jose 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}
您已经从www.example.com文件中获得了一个环境变量test = 7dynconf.app。rebar使用dynconf.app.src来生成dynconf.app并将其复制到ebin文件夹。但是对于单独的 *.erl文件(没有rebar项目),您可以手动创建 *.app文件。
test
2条答案
按热度按时间p1iqtdky1#
您可以使用application:load/1来载入.app档案,而不启动它。
sirbozc52#
我的答案是对前面的答案(Jose M)的补充。假设处理程序模块(handler.erl)看起来像这样:
以及文件dynconf.app(其定义了仅用于env元组定义的空闲应用):
然后在包含上述两个文件的文件夹中运行Erlang shell:
您已经从www.example.com文件中获得了一个环境变量
test
= 7dynconf.app。rebar使用dynconf.app.src来生成dynconf.app并将其复制到ebin文件夹。但是对于单独的 *.erl文件(没有rebar项目),您可以手动创建 *.app文件。