2009-07-31 13 views
7

¿Cómo funciona la línea de órdenes de un acceso (argumentos) como variables de entorno en Erlang. (Como las banderas, no ARGV) Por ejemplo:Erlang: ¿Cómo acceder a las banderas de la CLI (argumentos) como variables de entorno de aplicaciones?

RabbitMQ cli ve algo como:

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

Si uno mira a sasl.erl que ver la línea:

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

Por un poco de magia desconocida la sasl_error_logger variable se convierte en una tupla erlang! He intentado replicar esto en mi propia Erlang application, pero parece ser sólo capaz de acceder a estos valores a través de init:get_argument, que devuelve el valor como una cadena.

¿Cómo uno pase en valores a través de la línea de comandos y acceder a ellos fácilmente como términos Erlang?

ACTUALIZACIÓN También para todos aquellos que buscan, a utilizar las variables de entorno en la forma 'regular' utilizar os:getenv("THE_VAR")

Respuesta

7

Asegúrese de configurar un archivo de configuración de la aplicación

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

y entonces se puede establecer su línea de comando así:

-fred param 'billy' 

creo que es necesario tener el parámetro de configuración de la aplicación para hacer esto - nunca he hecho ninguna otra manera ...

algo más de información (más fácil de ponerlo en un comentario)

Dada esta

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

que pueda sin duda hacer esto:

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

pero (y esto puede ser importante) mi aplicación se inicia en este momento (en realidad puede sólo tiene que b e cargado y no realmente iniciado al mirar el código application_controller).

+0

Alan, gracias por la punta. Tengo el param en mi archivo '.app'. Buenas noticias: obtengo el valor predeterminado especificado en el archivo '.app'. Malas noticias: parece que no puedo anularlo en la línea de comando. –

+0

Nate, ¿podría mostrarnos su archivo de aplicación y el comando se inicia con Erlang? – Zed

+0

Sí, debería funcionar, por lo que probablemente haya algo sospechoso en su línea de comandos. ¿Has iniciado tu aplicación cuando accedes al entorno? –

Cuestiones relacionadas