LoginSignup
1
1

More than 5 years have passed since last update.

FabricとCuisineとJinja2を組み合わせてみた

Last updated at Posted at 2016-08-15

メモなので雑です。
こういうこともできたよということで

やりたいこと

複数のDjangoアプリを開発をしていて、FabricとCuisineを使ってデプロイをする。
githubに載せたくないsettings.py内の記述や環境(development, staging, production)によって異なる変数があるので、それらをローカルのファイルからリモートサーバーのファイルに反映させたい

コード

テンプレートファイル

project_root/settings/production.py

# 共通の設定項目は全環境でproject_root/settings/common.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 }},
    }
}

yamlファイル

値は適当にしてます

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

ファイルをアップロードする処理

アップロードというよりは、リモートで指定した中身のファイルを作っているといったほうが正しいですね。

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, '')

# 以下3行がメインの処理。変数をテンプレートに組み込んだ文字列を取得して、それを中身とするファイルをリモートサーバーに作成する。
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'))

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1