Es ist ein Memo, also ist es rau. Ich konnte so etwas machen
Ich entwickle mehrere Django-Apps und stelle sie mithilfe von Fabric and Cuisine bereit. Es gibt Variablen, die sich je nach Beschreibung und Umgebung (Entwicklung, Staging, Produktion) in settings.py unterscheiden und die ich nicht auf github setzen möchte, also möchte ich sie von der lokalen Datei in die Remote-Server-Datei übertragen
project_root/settings/production.py
#Allgemeine Einstellungselemente werden in allen Umgebungen projiziert_root/settings/common.Ich habe es mit py gemeinsam.
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 }},
}
}
Der Wert ist angemessen
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
Anstatt hochzuladen, ist es richtiger zu sagen, dass Sie eine Datei mit dem remote angegebenen Inhalt erstellen.
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, '')
#Die folgenden 3 Zeilen sind die Hauptverarbeitung. Rufen Sie die Zeichenfolge ab, die die Variable in die Vorlage einbettet, und erstellen Sie eine Datei, die sie enthält, auf dem Remoteserver.
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'))
https://gist.github.com/wrunk/1317933
Recommended Posts