From 59ff7f7ca0d128533eed2b3270dc3e9612fb8ca7 Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Wed, 2 Apr 2014 15:01:42 +0200 Subject: [PATCH] Deploy: Add root manage.py helper script, use fabric.context_managers.settings instead of `additional_context`. --- fnpdjango/deploy/__init__.py | 16 ++++++++++------ fnpdjango/deploy/templates/gunicorn.template | 2 +- fnpdjango/deploy/templates/manage.py.template | 3 +++ 3 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 fnpdjango/deploy/templates/manage.py.template diff --git a/fnpdjango/deploy/__init__.py b/fnpdjango/deploy/__init__.py index eaf5e71..1fbe57c 100644 --- a/fnpdjango/deploy/__init__.py +++ b/fnpdjango/deploy/__init__.py @@ -22,6 +22,7 @@ from subprocess import check_output from os.path import abspath, dirname, exists, join from django.utils.crypto import get_random_string from fabric.api import * +from fabric.context_managers import settings from fabric.contrib import files from fabric.tasks import Task, execute @@ -42,6 +43,10 @@ def setup(): for subdir in 'releases', 'packages', 'log', 'samples': if not files.exists(subdir): run('mkdir -p %s' % subdir, pty=True) + # Install helper manage.py script into root dir. + if not files.exists('manage.py'): + with settings(full_django_root=get_django_root_path('current')): + upload_sample('manage.py', where='', ext='', mode=0755) with cd('%(app_path)s/releases' % env): if not files.exists('current'): run('ln -sfT . current', pty=True) @@ -136,7 +141,8 @@ class DebianGunicorn(Service): sudo('gunicorn-debian restart %s' % self.name, shell=False) def upload_sample(self): - upload_sample('gunicorn', additional_context = dict(django_root_path = get_django_root_path(env['release']))) + with settings(full_django_root=get_django_root_path('current')): + upload_sample('gunicorn') class Apache(Service): def run(self): @@ -173,18 +179,16 @@ def upload_samples(): for service in env.services: service.upload_sample() -def upload_sample(name, where="samples/", additional_context=None): +def upload_sample(name, where="samples/", ext='.sample', **kwargs): require('app_path', 'project_name') - upload_path = '%s/%s%s.sample' % (env['app_path'], where, name) + upload_path = '%s/%s%s%s' % (env['app_path'], where, name, ext) if files.exists(upload_path): return print '>>> upload %s template' % name template = '%(project_name)s/' % env + name + '.template' if not exists(template): template = join(dirname(abspath(__file__)), 'templates/' + name + '.template') - template_context = additional_context or dict() - template_context.update(env) - files.upload_template(template, upload_path, template_context) + files.upload_template(template, upload_path, env, **kwargs) def upload_localsettings_sample(): "Fill out localsettings template and upload as a sample." diff --git a/fnpdjango/deploy/templates/gunicorn.template b/fnpdjango/deploy/templates/gunicorn.template index 4a70ba9..e2f5b5a 100644 --- a/fnpdjango/deploy/templates/gunicorn.template +++ b/fnpdjango/deploy/templates/gunicorn.template @@ -1,6 +1,6 @@ CONFIG = { 'mode': 'wsgi', - 'working_dir': '%(app_path)s/releases/current/%(django_root_path)s', + 'working_dir': '%(full_django_root)s', 'python': '%(app_path)s/ve/bin/python', 'user': '%(user)s', 'group': '%(user)s', diff --git a/fnpdjango/deploy/templates/manage.py.template b/fnpdjango/deploy/templates/manage.py.template new file mode 100644 index 0000000..8f9c223 --- /dev/null +++ b/fnpdjango/deploy/templates/manage.py.template @@ -0,0 +1,3 @@ +#!/bin/bash +# Simple wrapper for running current manage.py with the right Python. +exec %(app_path)s/ve/bin/python %(full_django_root)s/manage.py "$@" -- 2.20.1