2012-04-30 44 views
1

我正在用Reltool構建一個版本。該應用程序需要啓動配置文件。它使用以下函數讀取配置文件:配置文件和Reltool

read_config(Filename) -> 
    {ok, [Config]} = file:consult(filename:join(
            [filename:dirname(code:which(?MODULE)), 
            "..", "config", Filename])), 
    Config. 

什麼是使用配置文件以便Reltool構建工作發佈的好方法?

回答

1

你不需要有你自己的配置文件,除非它是用於非常特殊的目的。 如果你的配置文件是不同的版本,你可以有不同的配置到你的<application>/ebin/<application>.app

您可以將您的默認配置變量設置爲您的<application>/ebin/<application>.app。 有關更多細節,請參考http://www.erlang.org/doc/man/app.html

然後,您就可以通過使用 application:get_env(<application_name>, <key>, <default_value>)使用配置變量。 如果未定義,還可以使用application:set_env/3進行設置。 如需更多信息,請看看這個http://www.erlang.org/doc/man/application.html

那麼你也可以通過定義<any_name_or_system_name>.config覆蓋這些應用程序變量,然後使用一個,當你開始用--config <file_name>.configerl命令。你可以看看這個啓動命令選項,http://www.erlang.org/doc/man/erl.html

當你啓動一個命令時,你也可以通過使用-<application> <key> <value>覆蓋配置變量。

你也可以看看你的應用程序的配置文件語法。 http://www.erlang.org/doc/man/config.html

一旦你成功構建了一個OTP應用程序,它對你來說似乎很容易。

+0

好極了!我從一些webmachine演示代碼中無意中複製了配置讀取部分。但是,OTP的離線OTP有更好的工具。 Thx指出它。 –

3

如果您需要更專門的配置文件rebar允許您將文件複製到您的版本,例如。

%% reltool.config 
{overlay, [{copy, "../path/foo.config", "etc/foo.config"}, ... 

你可以通過配置文件作爲參數傳遞給:到您的應用程序下etc文件夾使用您的reltool.config文件overlay選項(overlay不是一個標準的reltool配置選項)(rebar默認創建etc)使用vm.args文件VM:

%% vm.args 
-config etc/foo.config 

你的啓動腳本應該在vm.args文件作爲參數傳遞給VM(再次rebar生成一個腳本,它是自然而然LY)。

功能init:get_argument可以讀取更專業的參數給虛擬機,如:

%% vm.args 
-very_special_config etc/foo.config 

case init:get_argument(very_special_config) of 
    {ok, Arg} -> Arg; 
    _ -> fail 
end 
+1

這不是'reltool',它允許您將文件複製到發行版中,但是鋼筋。 「overlay」選項不是標準的'reltool'配置選項,請參閱:http://www.erlang。org/doc/man/reltool.html – Amiramix

+0

@Amiramix謝謝,上帝趕上!我確定了答案。乾杯! – Tilman

+0

你的意思是'好趕'? :) – Amiramix