Erlang:アプリケーション環境変数としてCLIフラグ(引数)にアクセスする方法は?
-
06-07-2019 - |
質問
Erlangの環境変数としてコマンドラインフラグ(引数)にアクセスする方法。 (ARGVではなくフラグとして)例:
RabbitMQ cliは次のようになります。
erl \
...
-sasl errlog_type error \
-sasl sasl_error_logger '{file,"'${RABBITMQ_SASL_LOGS}'"}' \
... # more stuff here
sasl.erl
を見ると、次の行が表示されます:
get_sasl_error_logger() ->
case application:get_env(sasl, sasl_error_logger) of
% ... etc
何らかの未知の魔法により、 sasl_error_logger
変数はアーランタプルになります!これを自分のerlang application
で複製しようとしましたが、値を文字列として返す init:get_argument
を介してしかこれらの値にアクセスできないようです。
コマンドラインを介して値を渡し、アーラン用語として簡単にアクセスできるようにする方法
更新また、環境変数を「通常の」方法で使用する場合は、 os:getenv(" THE_VAR")
解決
アプリケーション設定ファイルを設定してください
{application, fred,
[{description, "Your application"},
{vsn, "1.0"},
{modules, []},
{registered,[]},
{applications, [kernel,stdlib]},
{env, [
{param, 'fred'}
]
...
そしてコマンドラインを次のように設定できます:
-fred param 'billy'
これを行うには、アプリケーション構成にパラメータが必要だと思います-他の方法で行ったことはありません...
その他の情報(コメントに入れるよりも簡単)
これを与えてください
{emxconfig, {ets, [{keypos, 2}]}},
私は確かにこれを行うことができます:
{ok, {StorageType, Config}} = application:get_env(emxconfig),
しかし(そしてこれは重要かもしれません)私のアプリケーションはこの時点で開始されます(実際にロードするだけで、実際にはapplication_controllerコードを見ることから開始されないかもしれません)。
所属していません StackOverflow