common fabfile.py(fabric task file)
# vim: ft=python
from fabric.api import *
from fabric.contrib import project
from fabric.contrib.files import exists
from fabric.utils import warn
import os.path
# env.parallel = True
env.roledefs.update({
'production_app_server': {
'hosts': [
],
},
'test_app_server': {
'hosts': [
],
},
'production_nginx_server': [
],
})
# env.user = 'webapps'
env.project_root = '... ...'
def upload_code():
project.rsync_project(
local_dir='./',
remote_dir=env.project_root,
default_opts='-rlvcpz',
extra_opts='--exclude-from=./exclude.txt',
)
def reload_app():
run('touch %s' % os.path.join(env.project_root, 'myapp/wsgi.py'))
@task
@roles('test_app_server')
@with_settings(user='webapps')
@parallel
def upload_test():
'''Upload code to test server'''
upload_code()
@task
@roles('production_app_server')
def upload_production():
'''Upload code to production server'''
upload_code()
@task
@roles('test_app_server')
@with_settings(user='webapps')
@parallel
def reload_test():
reload_app()
@task
def daily_test():
execute(upload_test)
execute(reload_test)