/
fabfile.py
53 lines (38 loc) · 1.57 KB
/
fabfile.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from fabric.contrib.files import exists
from fabric.api import env, run
from os import path
REPO_URL = 'https://github.com/hjwp/book-example.git'
SITES_FOLDER = '/home/harry/sites'
def deploy():
_create_directory_structure_if_necessary(env.host)
source_folder = path.join(SITES_FOLDER, env.host, 'source')
_get_latest_source(source_folder)
_update_virtualenv(source_folder)
_update_static_files(source_folder)
_update_database(source_folder)
def _create_directory_structure_if_necessary(site_name):
base_folder = path.join(SITES_FOLDER, site_name)
run('mkdir -p %s' % (base_folder))
for subfolder in ('database', 'static', 'virtualenv', 'source'):
run('mkdir -p %s/%s' % (base_folder, subfolder))
def _get_latest_source(source_folder):
if exists(path.join(source_folder, '.git')):
run('cd %s && git pull' % (source_folder,))
run('cd %s && git reset --hard' % (source_folder,))
else:
run('git clone %s %s' % (REPO_URL, source_folder))
def _update_virtualenv(source_folder):
virtualenv_folder = path.join(source_folder, '../virtualenv')
if not exists(path.join(virtualenv_folder, 'bin', 'pip')):
run('virtualenv %s' % (virtualenv_folder,))
run('%s/bin/pip install -r %s/requirements.txt' % (
virtualenv_folder, source_folder
))
def _update_static_files(source_folder):
run('cd %s && python manage.py collectstatic --noinput' % (
source_folder,
))
def _update_database(source_folder):
run('cd %s && python manage.py syncdb --noinput' % (
source_folder,
))