Domanda

In che modo si accede alla riga di comando (argomenti) come variabili di ambiente in Erlang. (Come flag, non ARGV) Ad esempio:

RabbitMQ cli assomiglia a:

erl \
...
-sasl errlog_type error \
-sasl sasl_error_logger '{file,"'${RABBITMQ_SASL_LOGS}'"}' \
... # more stuff here

Se uno guarda sasl.erl vedi la linea:

get_sasl_error_logger() ->
   case application:get_env(sasl, sasl_error_logger) of
% ... etc

Per qualche magia sconosciuta la variabile sasl_error_logger diventa una tupla erlang! Ho provato a replicarlo nella mia erlang applicazione , ma mi sembra di poter accedere a questi valori solo tramite init: get_argument , che restituisce il valore come stringa.

Come si passano i valori tramite la riga di comando e si può accedere facilmente a questi termini come termini?

AGGIORNAMENTO Anche per chiunque cerchi, per utilizzare le variabili di ambiente in modo "normale" utilizzare os:getenv("THE_VAR")

È stato utile?

Soluzione

Assicurati di impostare un file di configurazione dell'applicazione

{application, fred,
 [{description, "Your application"},
  {vsn, "1.0"},
  {modules, []},
  {registered,[]},
  {applications, [kernel,stdlib]},
  {env, [
    {param, 'fred'}
        ]
...

e quindi puoi impostare la tua riga di comando in questo modo:

-fred param 'billy'

Penso che sia necessario avere il parametro nella configurazione dell'applicazione per farlo - non l'ho mai fatto in nessun altro modo ...

Altre informazioni (più facile che inserirle in un commento)

Dato questo

{emxconfig, {ets, [{keypos, 2}]}},

Posso certamente farlo:

   {ok, {StorageType, Config}} = application:get_env(emxconfig),

ma (e questo potrebbe essere importante) la mia applicazione è stata avviata in questo momento (potrebbe effettivamente essere solo necessario caricarla e non essere effettivamente avviata guardando il codice application_controller).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top