2012-04-30 10 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に設定できます。このについての詳細は 、あなたが application:get_env(<application_name>, <key>, <default_value>)を使用して設定変数を使用する準備が整いました、そして、http://www.erlang.org/doc/man/app.html

を参照してください。 定義されていない場合は、application:set_env/3で設定することもできます。より多くの場合 は、その後も1あなたが--config <file_name>.configerlコマンドで起動したときにすることを使用し、その後、<any_name_or_system_name>.configを定義することにより、これらのアプリケーション変数をオーバーライドすることができ、このhttp://www.erlang.org/doc/man/application.html

をご覧ください。 http://www.erlang.org/doc/man/erl.html

コマンドを開始するときに、-<application> <key> <value>を使用して設定変数を上書きすることもできます。

アプリケーションの設定ファイルの構文については、こちらをご覧ください。 http://www.erlang.org/doc/man/config.html

OTPアプリケーションを正常に作成すると、非常に簡単に見えるようになります。

+0

素晴らしいです!私は何のwebmachineのデモコードから設定読み取り部分を頭脳無くコピーしました。しかし、オフコースOTPは、これのためのより良い道具を持っています。それを指摘するためのThx。 –

3

もっと特殊化された設定ファイルが必要な場合rebarは、あなたのリリースにファイルをコピーすることを可能にします。

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

あなたが引数として設定ファイルを渡すことができます:あなたのアプリの下etcフォルダにあなたのreltool.configファイルにoverlayオプションを(overlayが標準reltool設定オプションではありません)を使用する(rebarは、デフォルトではetc作成されます) VM vm.argsファイルを使用して:(

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

あなたの起動スクリプトは、VMに引数としてvm.argsファイルを渡す必要が再びrebarは、自動的な処理を行うスクリプトを生成し、 ly)。

機能init:get_argumentあなたは例えば、VMにより特化した引数を読み取ることができます:

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

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

ファイルをリリースではなくRebarにコピーできるのは 'reltool'ではありません。 'overlay'オプションは標準の' reltool'設定オプションではありません。http://www.erlangを参照してください。org/doc/man/reltool.html – Amiramix

+0

@Amiramixありがとう、神キャッチ!私は答えを修正しました。乾杯! – Tilman

+0

あなたは「良いキャッチ」を意味しましたか? :) – Amiramix

関連する問題