2011-07-19 2 views
14

Je travaille sur une application de surveillance et je dois passer au démarrage une configuration initiale qui consiste en quelques listes d'adresses IP. Quelle est la façon OTP de transmettre ces données à l'application - via le fichier .app ou existe-t-il une autre manière généralement acceptée?Configuration de l'application initiale du magasin Erlang

+0

Je suppose que personne n'a encore répondu à cette question, qui est "Y at-il un moyen OTP de transmettre des paramètres à un nœud Erlang de départ?". Je me bats aussi avec ce problème, parce que je veux avoir un nœud qui peut être démarré par programme avec les variables d'environnement que je veux. Trois approches viennent à l'esprit: 1) Modifier le fichier ".config" ou "* .app" avant de démarrer le noeud; 2) Passer ces paramètres en tant que drapeaux "-Application Key Value" pendant la création du noeud; 3) Laisser l'application dans un état vide, en attendant les messages de configuration pour démarrer sa fonction. Je ne sais toujours pas quoi utiliser, cependant ... – pedromanoel

Répondre

1

Vous pouvez gérer la configuration de plusieurs façons. ici un lien vers un autre stackoverflow topic

à mon humble avis, je suggère fichier .app, ou vous pouvez utiliser un fichier de configuration (here un autre lien vers stackoverflow sujet)

0

Je voudrais créer un processus de gen_server nom qui a une liste de adresses IP comme c'est l'état. Dans l'init du serveur, une liste prédéfinie serait lue dans un fichier en utilisant file:consult et utilisée comme état initial du serveur. Pour obtenir la liste des adresses IP de ce serveur nommé gen, un appel de handle_call (get_ip, _From, State) doit être implémenté.

De cette façon, vous empêchez l'état global partagé, ce qui vous donne un grand karma Erlang et un meilleur point de départ pour des fonctionnalités supplémentaires comme les changements d'adresse IP d'exécution.

7

Utiliser un Erlang configuration file:

Un fichier de configuration contient des valeurs pour les paramètres de configuration pour les applications dans le système. L'argument de ligne de commande erl -config Nom indique au système d'utiliser les données dans le fichier de configuration système Name.config.

Les valeurs des paramètres de configuration dans le fichier de configuration remplacent les valeurs dans les fichiers de ressources d'application (voir app (4)). Les valeurs du fichier de configuration peuvent être remplacées par des indicateurs de ligne de commande (voir erl (1)).

La valeur d'un paramètre de configuration est récupérée en appelant l'application : get_env/1,2.

Si vous devez les remplacer lors de l'exécution, vous pouvez utiliser application:set_env/3, mais avec précaution.

+3

Qu'est-ce qui qualifie comme "avec soin"? Pourriez-vous élaborer un peu, s'il vous plaît? – pedromanoel

+0

"With care" -> Une variable d'environnement définie à l'exécution est réinitialisée à sa valeur initiale lorsque le nœud est redémarré. Il est également difficile de suivre les modifications effectuées au moment de l'exécution si elles ne sont pas reflétées dans un fichier de configuration contrôlé par la version. –

0

Utilisez un fichier dans lequel vous avez vos données sous forme de termes erlang. Cependant, vous devez protéger le fichier. Lecture à partir du fichier au démarrage utiliser: file:consult/1. Si la modification du fichier se produit par l'utilisateur ou l'administrateur système, utilisez les fonctions suivantes pour protéger ou refuser l'accès au fichier:

 
-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}). 

Utilisez la fonction protect_file/1 pour rendre le fichier en lecture seule. Si vous devez rendre le fichier accessible en écriture, modifiez-le en utilisant unprotect_file/1. Un fichier avec des termes erlang est plus facile car vous n'avez pas besoin d'analyser. Vous pouvez également écrire des configurations sous forme d'objets JSON ou XML dans un fichier. En résumé, l'utilisation d'un fichier pour toutes vos configs sera mieux gérée par votre application et ceux qui interagissent avec elle.

Un exemple est le fichier ejabberd.cfg, le fichier de configuration pour le serveur ejabberd. C'est le plus facile avec un fichier avec des termes erlang parce que vous pouvez commenter ici et là l'administrateur système pour voir les autres options disponibles sur une certaine configuration.

+0

Après avoir vérifié le code source ejabberd, j'ai également pensé à utiliser cette méthode. Pourquoi cela a-t-il été déprécié? – naiquevin

+0

Je me demande aussi, j'ai utilisé cette méthode pour longtemps. 'Ejabberd' utilise cela aussi, même' Riak' e.t.c Quel est le problème avec les gens? –

+0

-1, car la protection du fichier ne répond pas réellement à la question de l'OP. –

Questions connexes