Working version of fabfile
This commit is contained in:
parent
317170185c
commit
ea49f19610
1 changed files with 69 additions and 42 deletions
111
fabfile.py
vendored
111
fabfile.py
vendored
|
@ -1,15 +1,14 @@
|
|||
from fabric.api import task, env, run, local, roles, cd, execute, hide, puts,\
|
||||
sudo
|
||||
import posixpath
|
||||
import re
|
||||
|
||||
|
||||
env.project_name = 'youmap'
|
||||
env.repository = 'git@github.com:lincolnloop/youmap.git'
|
||||
env.repository = 'https://yohanboniface@bitbucket.org/yohanboniface/youmap_project.git'
|
||||
env.local_branch = 'master'
|
||||
env.remote_ref = 'origin/master'
|
||||
env.requirements_file = 'requirements.pip'
|
||||
env.restart_command = 'supervisorctl restart {project_name}'.format(**env)
|
||||
env.restart_sudo = True
|
||||
env.restart_sudo = False
|
||||
|
||||
|
||||
#==============================================================================
|
||||
|
@ -21,15 +20,16 @@ def live():
|
|||
"""
|
||||
Use the live deployment environment.
|
||||
"""
|
||||
server = 'youmap.com'
|
||||
server = 'youmap.org'
|
||||
env.roledefs = {
|
||||
'web': [server],
|
||||
'db': [server],
|
||||
}
|
||||
env.system_users = {server: 'www-data'}
|
||||
env.virtualenv_dir = '/srv/www/{project_name}'.format(**env)
|
||||
env.virtualenv_dir = '/home/ybon/.virtualenvs/{project_name}'.format(**env)
|
||||
env.project_dir = '{virtualenv_dir}/src/{project_name}'.format(**env)
|
||||
env.project_conf = '{project_name}.settings.local'.format(**env)
|
||||
env.restart_command = 'circusctl restart {project_name}'.format(**env)
|
||||
|
||||
|
||||
@task
|
||||
|
@ -37,15 +37,16 @@ def dev():
|
|||
"""
|
||||
Use the development deployment environment.
|
||||
"""
|
||||
server = 'youmap.dev.lincolnloop.com'
|
||||
server = 'ks3267459.kimsufi.com'
|
||||
env.roledefs = {
|
||||
'web': [server],
|
||||
'db': [server],
|
||||
}
|
||||
env.system_users = {server: 'www-data'}
|
||||
env.virtualenv_dir = '/srv/www/{project_name}'.format(**env)
|
||||
env.project_dir = '{virtualenv_dir}/src/{project_name}'.format(**env)
|
||||
env.project_conf = '{project_name}.conf.local'.format(**env)
|
||||
env.virtualenv_dir = '/home/ybon/.virtualenvs/{project_name}'.format(**env)
|
||||
env.project_dir = '/home/ybon/dev/{project_name}'.format(**env)
|
||||
env.project_conf = '{project_name}.settings.local'.format(**env)
|
||||
env.restart_command = '{virtualenv_dir}/bin/circusctl restart {project_name}'.format(**env)
|
||||
|
||||
|
||||
# Set the default environment.
|
||||
|
@ -69,14 +70,17 @@ def bootstrap(action=''):
|
|||
puts('Assuming {host} has already been bootstrapped since '
|
||||
'{virtualenv_dir} exists.'.format(**env))
|
||||
return
|
||||
sudo('virtualenv {virtualenv_dir}'.format(**env))
|
||||
if not exists:
|
||||
sudo('mkdir -p {0}'.format(posixpath.dirname(env.virtualenv_dir)))
|
||||
sudo('git clone {repository} {project_dir}'.format(**env))
|
||||
sudo('{virtualenv_dir}/bin/pip install -e {project_dir}'.format(**env))
|
||||
with cd(env.virtualenv_dir):
|
||||
sudo('chown -R {user} .'.format(**env))
|
||||
fix_permissions()
|
||||
# run('mkvirtualenv {project_name}'.format(**env))
|
||||
with hide('running', 'stdout'):
|
||||
project_git_exists = run('if [ -d "{project_dir}" ]; then echo 1; fi'\
|
||||
.format(**env))
|
||||
if not project_git_exists:
|
||||
run('mkdir -p {0}'.format(posixpath.dirname(env.virtualenv_dir)))
|
||||
run('git clone {repository} {project_dir}'.format(**env))
|
||||
# sudo('{virtualenv_dir}/bin/pip install -e {project_dir}'.format(**env))
|
||||
# with cd(env.virtualenv_dir):
|
||||
# sudo('chown -R {user} .'.format(**env))
|
||||
# fix_permissions()
|
||||
requirements()
|
||||
puts('Bootstrapped {host} - database creation needs to be done manually.'\
|
||||
.format(**env))
|
||||
|
@ -143,8 +147,8 @@ def update(action='check'):
|
|||
reqs_changed = False
|
||||
run('git merge {remote_ref}'.format(**env))
|
||||
run('find -name "*.pyc" -delete')
|
||||
run('git clean -df')
|
||||
fix_permissions()
|
||||
if action == "clean":
|
||||
run('git clean -df')
|
||||
if action == 'force' or reqs_changed:
|
||||
# Not using execute() because we don't want to run multiple times for
|
||||
# each role (since this task gets run per role).
|
||||
|
@ -157,9 +161,11 @@ def collectstatic():
|
|||
"""
|
||||
Collect static files from apps and other locations in a single location.
|
||||
"""
|
||||
collect_remote_statics()
|
||||
dj('collectstatic --link --noinput')
|
||||
with cd('{virtualenv_dir}/var/static'.format(**env)):
|
||||
fix_permissions()
|
||||
# dj('compress')
|
||||
# with cd('{virtualenv_dir}/var/static'.format(**env)):
|
||||
# fix_permissions()
|
||||
|
||||
|
||||
@task
|
||||
|
@ -168,7 +174,7 @@ def syncdb(sync=True, migrate=True):
|
|||
"""
|
||||
Synchronize the database.
|
||||
"""
|
||||
dj('syncdb --migrate --noinput')
|
||||
dj('syncdb --noinput')
|
||||
|
||||
|
||||
@task
|
||||
|
@ -186,27 +192,26 @@ def restart():
|
|||
|
||||
@task
|
||||
@roles('web', 'db')
|
||||
def requirements():
|
||||
def requirements(name=None, upgrade=False):
|
||||
"""
|
||||
Update the requirements.
|
||||
"""
|
||||
run('{virtualenv_dir}/bin/pip install -r {project_dir}/requirements.txt'\
|
||||
.format(**env))
|
||||
with cd('{virtualenv_dir}/src'.format(**env)):
|
||||
with hide('running', 'stdout', 'stderr'):
|
||||
dirs = []
|
||||
for path in run('ls -db1 -- */').splitlines():
|
||||
full_path = posixpath.normpath(posixpath.join(env.cwd, path))
|
||||
if full_path != env.project_dir:
|
||||
dirs.append(path)
|
||||
if dirs:
|
||||
fix_permissions(' '.join(dirs))
|
||||
with cd(env.virtualenv_dir):
|
||||
with hide('running', 'stdout'):
|
||||
match = re.search(r'\d+\.\d+', run('bin/python --version'))
|
||||
if match:
|
||||
with cd('lib/python{0}/site-packages'.format(match.group())):
|
||||
fix_permissions()
|
||||
base_command = '{virtualenv_dir}/bin/pip install'.format(virtualenv_dir=env.virtualenv_dir)
|
||||
if upgrade:
|
||||
base_command += ' --upgrade'
|
||||
if not name:
|
||||
kwargs = {
|
||||
"base_command": base_command,
|
||||
"project_dir": env.project_dir,
|
||||
"requirements_file": env.requirements_file,
|
||||
}
|
||||
run('{base_command} -r {project_dir}/{requirements_file}'\
|
||||
.format(**kwargs))
|
||||
else:
|
||||
run('{base_command} {name}'.format(
|
||||
base_command=base_command,
|
||||
name=name
|
||||
))
|
||||
|
||||
|
||||
#==============================================================================
|
||||
|
@ -217,7 +222,7 @@ def dj(command):
|
|||
"""
|
||||
Run a Django manage.py command on the server.
|
||||
"""
|
||||
run('{virtualenv_dir}/bin/manage.py {dj_command} '
|
||||
run('{virtualenv_dir}/bin/python {project_dir}/manage.py {dj_command} '
|
||||
'--settings {project_conf}'.format(dj_command=command, **env))
|
||||
|
||||
|
||||
|
@ -237,3 +242,25 @@ def fix_permissions(path='.'):
|
|||
run('chgrp -R {0} -- {1}'.format(system_user, path))
|
||||
else:
|
||||
run('chmod -R go= -- {0}'.format(path))
|
||||
|
||||
|
||||
def collect_remote_statics():
|
||||
"""
|
||||
Add leaflet and leaflet.draw in a repository watched by collectstatic.
|
||||
"""
|
||||
remote_static_dir = '{project_dir}/{project_name}/remote_static'.format(**env)
|
||||
run('mkdir -p {0}'.format(remote_static_dir))
|
||||
remote_repositories = {
|
||||
'leaflet': "git://github.com/CloudMade/Leaflet.git",
|
||||
'draw': "git://github.com/jacobtoye/Leaflet.draw.git",
|
||||
'hash': "git://github.com/mlevans/leaflet-hash.git",
|
||||
}
|
||||
with cd(remote_static_dir):
|
||||
for subdir, repository in remote_repositories.iteritems():
|
||||
with hide("running", "stdout"):
|
||||
exists = run('if [ -d "{0}" ]; then echo 1; fi'.format(subdir))
|
||||
if exists:
|
||||
with cd(subdir):
|
||||
run('git pull')
|
||||
else:
|
||||
run('git clone {0} {1}'.format(repository, subdir))
|
||||
|
|
Loading…
Reference in a new issue