Erlang:アプリケーション環境変数としてCLIフラグ(引数)にアクセスする方法は?

StackOverflow https://stackoverflow.com/questions/1213108

質問

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コードを見ることから開始されないかもしれません)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top