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
Répondre
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.
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.
Qu'est-ce qui qualifie comme "avec soin"? Pourriez-vous élaborer un peu, s'il vous plaît? – pedromanoel
"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. –
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.
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
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? –
-1, car la protection du fichier ne répond pas réellement à la question de l'OP. –
- 1. Configuration initiale du contrôleur Ruby on Rails
- 2. NSUserDefaults configuration initiale
- 3. Configuration initiale pour l'application Android
- 4. Analyse du fichier de configuration Erlang avec Python
- 5. Configuration du fichier de commandes à exécuter sur la ligne de commande, configuration du magasin
- 6. configuration multi-magasin Magento url
- 7. Magento multi site/configuration du magasin - aidez s'il vous plaît!
- 8. Configuration initiale de Postgresql: Comment accéder en tant qu'utilisateur postgres?
- 9. Efficacité du magasin de données et du magasin de proximité
- 10. Xcode 4 - Cible de ligne de commande avec configuration initiale
- 11. Pour Selenium WebDriver - Maven et la configuration initiale de pom.xml
- 12. Comment analyser le fichier de configuration avec erlang?
- 13. erreur du compilateur Erlang
- 14. ASP.NET MVC, Spring.NET, NHibernate configuration initiale/exemple/tutoriel
- 15. Utilisation de lapplication avec des arguments de modification
- 16. Comment faire une configuration initiale de la configuration des données avec CoreData?
- 17. Enregistrement dans un conteneur IoC après la configuration initiale
- 18. La configuration initiale avec DbFit ne fonctionne pas
- 19. Configuration du cluster rabbitMQ
- 20. Elimination du délai de la touche initiale
- 21. Comment créer plusieurs sous-ensembles au sein de lapplication
- 22. L'utilisation de '[' crochet comme une fonction pour lapplication dans R
- 23. Servicehost IIS avec loadbalancing et magasin de configuration personnalisé?
- 24. Utilisation du magasin de calendriers.
- 25. Effacement du magasin de données?
- 26. Chaîne de connexion du magasin dans la configuration de service pour le service de données WCF
- 27. Fichier PID d'installation initiale du serveur Percona
- 28. Emplacement du répertoire du magasin
- 29. Comment exécuter du code avant que la configuration du magasin ne prenne effet?
- 30. Création du magasin d'état de session SQL
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