[PYTHON] J'ai essayé de combiner Fabric, Cuisine et Jinja2

C'est un mémo, donc c'est difficile. J'ai pu faire quelque chose comme ça

Chose que tu veux faire

Je développe plusieurs applications Django et les déploie à l'aide de Fabric et Cuisine. Il y a des variables qui diffèrent en fonction de la description et de l'environnement (développement, mise en scène, production) dans settings.py que je ne veux pas mettre sur github, donc je veux les refléter du fichier local vers le fichier du serveur distant

code

Fichier modèle

project_root/settings/production.py



#Les éléments de réglage communs sont projetés dans tous les environnements_root/settings/common.Je l'ai en commun avec py.

from sample_app.settings.common import *

SECRET_KEY = '{{ secret_key }}'

DEBUG = False

ALLOWED_HOSTS = ['127.0.0.1']

DATABASES = {
    'default': {
        'ENGINE': '{{ databases.default.engine }}',
        'NAME': '{{ databases.default.name }}',
        'USER': '{{ databases.default.user }}',
        'PASSWORD': '{{ databases.default.password }}',
        'HOST': '{{ databases.default.host }}',
        'PORT': {{ databases.default.port }},
    }
}

fichier yaml

La valeur est appropriée

secrets.yml


django:
  settings:
    production:
      secret_key: ''
      databases:
        default:
          engine: django.db.backends.mysql
          name: sample_app
          user: root
          password: ''
          host: 127.0.0.1
          port: 3306

Processus de téléchargement d'un fichier

Plutôt que de télécharger, il est plus correct de dire que vous créez un fichier avec le contenu spécifié à distance.

from jinja2 import Environment, FileSystemLoader
from cuisine import file_write

secrets = yaml.load(file('secrets.yml'))
local_template_name = local_template_path.split('/')[-1]
local_template_dir = local_template_path.replace(local_template_name, '')

#Les 3 lignes suivantes constituent le traitement principal. Récupérez la chaîne qui incorpore la variable dans le modèle et créez un fichier la contenant sur le serveur distant.
jinja2_env = Environment(loader=FileSystemLoader(local_template_dir))
content = jinja2_env.get_template(local_template_name).render(secrets['django']['settings']['production'])
file_write(remote_path, content.encode('utf-8'))

référence

https://gist.github.com/wrunk/1317933

Recommended Posts

J'ai essayé de combiner Fabric, Cuisine et Jinja2
J'ai essayé d'utiliser jinja2
J'ai comparé lame et jinja2
J'ai essayé d'utiliser PyEZ et JSNAPy. Partie 2: J'ai essayé d'utiliser PyEZ
J'ai essayé d'utiliser PyEZ et JSNAPy. Partie 1: Aperçu
J'ai essayé le web scraping en utilisant python et sélénium
J'ai implémenté DCGAN et essayé de générer des pommes
J'ai essayé de gratter
J'ai essayé la détection d'objets en utilisant Python et OpenCV
J'ai essayé de jouer en connectant PartiQL et MongoDB
J'ai essayé la différenciation jacobienne et partielle avec python
J'ai essayé la synthèse de fonctions et le curry avec python
J'ai essayé AutoKeras
J'ai essayé le moulin à papier
J'ai essayé l'analyse morphologique et la vectorisation de mots
J'ai essayé django-slack
J'ai essayé Django
J'ai essayé spleeter
J'ai essayé cgo
[Introduction au PID] J'ai essayé de contrôler et de jouer ♬
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
J'ai essayé pipenv et asdf pour le contrôle de version Python
J'ai essayé d'utiliser google test et CMake en C
J'ai essayé d'ajouter un post-incrément à CPython. Présentation et résumé
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
J'ai essayé d'ajouter des appels système et des planificateurs à Linux
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
Python: j'ai essayé menteur et honnête
J'ai essayé d'installer scrapy sur Anaconda et je n'ai pas pu
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'exécuter pymc
J'ai essayé le spoofing ARP
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé Python> autopep8
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé PyCaret2.0 (pycaret-nightly)
J'ai essayé d'utiliser openpyxl
J'ai essayé le deep learning
J'ai essayé AWS CDK!
J'ai essayé d'utiliser Ipython
J'ai essayé de déboguer.
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé la mapview de Kivy
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé de déplacer EfficientDet
J'ai essayé la programmation shell