[RUBY] Création d'une bibliothèque de fichiers de configuration égoïste

Aperçu

J'ai créé une bibliothèque de gemmes autour du fichier de réglage avec ruby. Cette bibliothèque prend en charge:

J'avais beaucoup de brouillard autour du fichier de paramètres et je voulais une bibliothèque qui pourrait tout résoudre en même temps. Le contenu de la brume est juste le revers du support ci-dessus, mais je ne veux pas écrire les paramètres en texte brut dans un fichier texte. Je ne veux pas écrire différents éléments de paramétrage pour la production, le développement, etc. et tous les éléments de paramétrage courants dans le même fichier. Nous avons créé de telles pensées comme point de départ.

~~ Cette bibliothèque n'a pas été entièrement testée, donc les spécifications et la fiabilité n'ont pas été entièrement affinées. Si vous avez une meilleure bibliothèque que celle-ci, veuillez nous le faire savoir dans les commentaires. ,,, ~~ Gefun Gefun. A partir de maintenant, je vais trouver des points d'insatisfaction et des bugs et les mettre à jour lentement et lentement pour moi. (Peut-être)

Comment ça marche concrètement

Lire le fichier de paramètres

Lorsqu'il n'y a qu'un seul fichier de paramètres

Supposons que vous ayez le fichier de configuration suivant.

project_config.yml


---
- :key_path: "/home/vagrant/.crypt_config/project_key.yml"
- :animal:
    :value: |-
      ?0thjXJj2wR4kzp3EidmJ+bgWtYXs7/DZpTlcDFiLjDbsSB2YWnZEB+ovMTNC
      37kx
    :desc: ''
  :fruit:
    :value: |-
      ?wIGrSC/bf5om/rlfIlz7hAIOjaZFjIgw4ulguIKI7YpBrx4JOcmUo3cLH1vC
      eDeW
    :desc: This fruit color is yellow.

Lors de son utilisation dans le programme, il peut être utilisé comme suit.

require 'dinomischus'
 
# ex1 
hash = Dinomischus.load_file('config_project.yml')  
# => {:animal=>"owl", 
#     :fruit=>"Lemon"}
p hash[:animal]  # => owl  
p hash[:fruit]   # => Lemon 

Si vous souhaitez également obtenir l'élément de description (desc), ajoutez true``` à l'argument.

# ex2 
hash = Dinomischus.load_file('project_config.yml', true)
# => {:animal=>{:value=>"owl", :desc=>""},
#     :fruit=>{:value=>"Lemon", :desc=>"This fruit color is yellow."} }

p hash[:fruit][:value]  # => Lemon
p hash[:fruit][:desc]   # => This fruit color is yellow.

Lorsqu'il y a plusieurs fichiers de paramètres

Même s'il existe plusieurs fichiers de paramètres, ils peuvent être lus en même temps. Dans ce cas, un fichier distinct définissant l'ordre de lecture est requis. (Project_config_index.yml dans l'exemple) Si les éléments de réglage sont dupliqués, la valeur de réglage du fichier lu ultérieurement est prioritaire. En utilisant cela, il est possible de préparer un fichier de paramètres pour la valeur par défaut et de séparer le fichier de paramètres pour l'environnement de développement et le fichier de paramètres pour l'environnement de production.

project_config_index.yml


---
- :conf_path: "/path/to/config/project_config_default.yml"
- :conf_path: "/path/to/config/project_config_product.yml"

project_config_default.yml


---
- :key_path: "/home/vagrant/.crypt_config/project_key.yml"
- :animal:
    :value: |-
      ?0thjXJj2wR4kzp3EidmJ+bgWtYXs7/DZpTlcDFiLjDbsSB2YWnZEB+ovMTNC
      37kx
    :desc: ''
  :fruit:
    :value: |-
      ?wIGrSC/bf5om/rlfIlz7hAIOjaZFjIgw4ulguIKI7YpBrx4JOcmUo3cLH1vC
      eDeW
    :desc: This fruit color is yellow.

project_config_product.yml


---
- :key_path: "/home/vagrant/.crypt_config/project_key.yml"
- :fruit:
    :value: banana
    :desc:Fruit jaune
  :furniture:
    :value: chair
    :desc:Choses sur lesquelles s'asseoir

Après avoir lu ce qui précède, ce sera comme suit.

require 'dinomischus'
 
hash = Dinomischus.load_file('project_name_config_index.yml')
# => {:animal=>"owl", 
#     :fruit=>"banana",
#     :furniture=>"chair"}

La valeur de réglage de: fruit '' a changé en `` banane '' en fonction du fichier lu plus tard.

Créer / écrire un fichier de paramètres

Surtout pour la première fois, il existe différentes règles, donc Utilisez-le en appelant le menu à partir d'une commande shell.

Créer un fichier modèle

(On suppose que l'installation décrite plus loin est terminée.)

$ cd /path/to/Répertoire de configuration du projet(config)Emplacement
$ dinomischus
****** Welcome Egoistic Config ******
  1. Make Template
  2. Add or Update Crypted Value
  3. List Configs Simple
  4. List Configs Specify
  c. Clear Screen
  h. Ruby Command List
  z. End 
-----------> Select Menu [1-4,c,h,z]: 

Sélectionnez 1 lorsque le menu ↑ apparaît.

-----------> Select Menu [1-4,c,h,z]: 1
  
****** Make Template ******
  
Input Your Config Prefix Name : ____

Si vous sélectionnez 1, il vous sera demandé la première chaîne de caractères pour l'identification du fichier de réglage. Veuillez saisir n'importe quel caractère. (Ici prj) (S'il existe un fichier qui existe déjà avec le caractère d'identification qui a été défini une fois, le processus de création de fichier sera ignoré.)

Input Your Config Prefix Name : prj
Make File Default Value is ... 
  Key    File Place [/path/to/Annuaire personnel/.crypt_config/prj_key.yml]
  Config File Place [/path/to/Répertoire actuel/config/prj_config.yml]
  Define File Place [/path/to/Répertoire actuel/config/prj_config_index.yml]
 
Press Enter Key to Next Step... 

Vérifiez le fichier créé et appuyez sur la touche Entrée.

Done! 
Next Step is Add Crypt Config|Plain Config to /path/to/Répertoire actuel/config/prj_config.yml .  
Add Config Value then You Select Menu No.2 .
-----------> Select Menu [1-4,c,h,z]: 

Ceci termine la création du modèle. Après cela, copiez le fichier terminé comme il convient ou modifiez la destination de sauvegarde pour le modifier dans la configuration souhaitée. Si vous changez de répertoire, le chemin de chaque fichier est écrit au début du fichier de paramètres. Veuillez changer cela également.

Ajout de la valeur de réglage (cryptage)

Appelez le menu depuis la commande `` dinomischus '' comme précédemment.

$ cd /path/to/Répertoire de configuration du projet(config)Emplacement
$ dinomischus
****** Welcome Egoistic Config ******
  1. Make Template
  2. Add or Update Crypted Value
  3. List Configs Simple
  4. List Configs Specify
  c. Clear Screen
  h. Ruby Command List
  z. End 
-----------> Select Menu [1-4,c,h,z]: 

Sélectionnez 2 lorsque le menu ↑ apparaît.

-----------> Select Menu [1-4,c,h,z]: 2
 
****** Crypted Value Setting ******"
  Input Your Config Path : config/prj_config.yml
  Input Your Key   : email
  Input Your Value : [email protected]
  Input Your Description :Échantillon de réglage E-adresse mail. Cela n'existe pas.
 
Done! 

Après avoir entré le chemin du fichier de configuration que vous souhaitez modifier Entrez la valeur que vous souhaitez définir pour chaque élément qui apparaît. C'est tout pour crypter les paramètres. Si tout se passe bien, vous devriez avoir un fichier de configuration comme celui ci-dessous.

config/prj_config_index.yml


---
- :conf_path: "/home/vagrant/project/config/prj_config.yml"

/path/to/project/config/prj_config.yml


---
- :key_path: "~/.crypt_config/prj_key.yml"
- :dummy:
    :value: ''
    :desc: ''
  :email:
    :value: |-
      ?Afo3Ccn307HZgQgBRwmyUQtCqDus3063wz1h9CIpRMIWdpRC07yfd2TG5jKa
      OrQiDDMfySjQIhWfL1Gt0UJ8tngSiUJT4gfgvjN7/+LHpdk=
    :desc:Échantillon de réglage E-adresse mail. Cela n'existe pas.

yaml:~/.crypt_config/prj_key.yml


---
:key:
  :type: sha256
  :value: eUIZzgKKnsJCoLcRX5pXXg

Comment installer

Puisque l'installation est enregistrée dans ruby gem, elle peut être effectuée par gem install.

$ gem install dinomischus

Description de chaque fichier

Diagramme de relation entre chaque fichier

ConfigFileRelation.png

Fichier de définition (`` * _ config_index.yml```)

Définit l'ordre de lecture des fichiers de configuration.

Fichier de configuration (`` * _ config.yml```)

Le lien vers le fichier de clé (key_path) et le texte de la valeur de réglage sont enregistrés.

Fichier clé (`` * _ key.yml '')

Stocke le mot de passe utilisé pour le cryptage / décryptage.

La source

Il est disponible sur KurokoSin / Dinomischus (Github).

Environnement de développement

Ubuntu 20.04LTS  ruby 2.6.3 est. Je le fais pour le rubis, pas pour les rails. J'aimerais aussi pouvoir me déplacer sur des rails. .. .. ..

Recommended Posts

Création d'une bibliothèque de fichiers de configuration égoïste
[CentOS, Eclipse] Charger les fichiers de bibliothèque dans le projet C
Créer un programme de menu
Qu'est-ce qu'un fichier JAR?
[Java] Créer un fichier temporaire