2011-07-19 1 views
14

estoy trabajando en una aplicación de monitoreo y tengo que pasar en el arranque cierta configuración inicial que consiste en un par de listas de direcciones IP. ¿Cuál es la forma de OTP para pasar estos datos a la aplicación a través del archivo .app o hay alguna otra forma aceptada en general?tienda de Erlang configuración de la aplicación inicial

+0

supongo que nadie respondió a esta pregunta sin embargo, que es "¿Hay una manera OTP para pasar parámetros a un nodo a partir de Erlang?". También estoy luchando con este problema, porque quiero tener un nodo que pueda iniciarse programáticamente con las variables env que yo quiera. Tres enfoques vienen a la mente: 1) Modifique el archivo ".config" o "* .app" antes de iniciar el nodo; 2) Pase estos parámetros como indicadores de "Valor clave de la aplicación" durante la creación del nodo; 3) Deje la aplicación en un estado en blanco, esperando los mensajes de configuración para comenzar su función. Aún no estoy seguro de qué usar, aunque ... – pedromanoel

Respuesta

1

puede manejar la configuración de varias maneras. aquí un enlace a otro stackoverflow topic

mi humilde opinión le sugiero archivo .app, o puede utilizar un archivo de configuración (here otro enlace a stackoverflow tema)

0

me gustaría crear un proceso gen_server nombre que tiene una lista de direcciones IP como su estado. En el inicio del servidor, una lista predefinida se leerá de un archivo usando file:consult y se usará como el estado inicial del servidor. Para obtener la lista de direcciones IP de este nombre gen_server, se debe implementar handle_call (get_ip, _From, State).

De esta manera prevenir compartido estado global, lo que le da una gran karma Erlang, y tener un mejor punto de partida para una mayor funcionalidad, como los cambios de dirección IP en tiempo de ejecución.

7

Utilice un Erlang configuration file:

Un archivo de configuración contiene los valores de los parámetros de configuración para las aplicaciones en el sistema. El argumento de la línea de comando erl -config El nombre indica al sistema que use datos en el archivo de configuración del sistema Name.config.

Los valores de los parámetros de configuración en el archivo de configuración anularán los valores en los archivos de recursos de la aplicación (ver aplicación (4)). Los valores en el archivo de configuración pueden anularse mediante indicadores de línea de comando (consulte erl (1)).

El valor de un parámetro de configuración se recuperan llamando aplicación: get_env/1,2.

Si necesita anularlos en tiempo de ejecución, puede usar application:set_env/3, pero con cuidado.

+3

¿Qué califica como "con cuidado"? ¿Podría elaborar un poco, por favor? – pedromanoel

+0

"Con cuidado" -> Una variable de entorno establecida en el tiempo de ejecución se restablece a su valor inicial cuando se reinicia el nodo. También es difícil hacer un seguimiento de los cambios realizados en el tiempo de ejecución si no se reflejan en un archivo de configuración controlado por la versión. –

0

utilizar un archivo en el que tienes sus datos como términos de Erlang. Sin embargo, necesita proteger el archivo. Leyendo del archivo al inicio use: file:consult/1. Si la modificación del archivo se producirá por el usuario o administrador del sistema, utilice las siguientes funciones para proteger o denegar el acceso al archivo:

 
-include_lib("kernel/include/file.hrl"). 

protect_file(File)-> 
    {_,File_info} = file:read_file_info(File), 
    file:write_file_info(File,File_info#file_info{access = read,mode = 33060}). 

unprotect_file(File)-> 
    {_,File_info} = file:read_file_info(File), 
    file:write_file_info(File,File_info#file_info{access = read_write,mode = 33206}). 

Uso protect_file/1 función para que el archivo de sólo lectura. Si necesita hacer que el archivo sea de escritura, modifíquelo usando unprotect_file/1. Un archivo con términos erlang es más fácil porque no necesita análisis. También puede escribir configuraciones como objetos JSON o datos XML en un archivo. En resumen, la aplicación y los que interactúan con ella administrarán mejor el uso de un archivo para todas sus configuraciones.

Un ejemplo es el archivo ejabberd.cfg, el archivo de configuración para el servidor ejabberd. Es más fácil con un archivo con términos de erlang porque puede comentar aquí y allá para que el administrador del sistema vea otras opciones disponibles sobre una determinada configuración.

+0

Después de verificar el código fuente de ejabberd, también pensé en usar este método. ¿Por qué se ha bajado este voto? – naiquevin

+0

me pregunto también, he usado este método por mucho tiempo. 'Ejabberd' usa esto también, incluso' Riak' e.t.c ¿Qué pasa con las personas? –

+0

-1, porque la protección del archivo no responde a la pregunta del OP. –

Cuestiones relacionadas