X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/3ed9ea53cb49b992575f5df2b7d6e1e888c33cba..ead8d8353603784aa88eef9a139c2b19a8846340:/fabfile.py diff --git a/fabfile.py b/fabfile.py index 679186459..e4033209b 100644 --- a/fabfile.py +++ b/fabfile.py @@ -14,20 +14,25 @@ def staging(): """Use staging server""" env.hosts = ['zuber@stigma.nowoczesnapolska.org.pl:2222'] env.path = '/var/lektury' + env.python = '/usr/bin/python' + env.virtualenv = '/usr/bin/virtualenv' + env.pip = '/usr/bin/pip' def production(): """Use production server""" - env.hosts = ['fundacja@wolnelektury:22123'] + env.hosts = ['fundacja@wolnelektury.pl:22123'] env.path = '/opt/lektury' - + env.python = '/opt/lektury/basevirtualenv/bin/python' + env.virtualenv = '/opt/lektury/basevirtualenv/bin/virtualenv' + env.pip = '/opt/lektury/basevirtualenv/bin/pip' # ========= # = Tasks = # ========= def test(): "Run the test suite and bail out if it fails" - require('project_dir', provided_by=[staging, production]) - result = local('cd %(path)s; python manage.py test' % env) + require('hosts', 'path', provided_by=[staging, production]) + result = run('cd %(path)s/%(project_name)s; %(python)s manage.py test' % env) def deploy(): """ @@ -35,13 +40,13 @@ def deploy(): install any required third party modules, install the virtual host and then restart the webserver """ - require('hosts', provided_by=[staging, production]) - require('path') + require('hosts', 'path', provided_by=[staging, production]) import time env.release = time.strftime('%Y-%m-%dT%H%M') upload_tar_from_git() + upload_requirements_bundle() install_requirements() symlink_current_release() migrate() @@ -49,8 +54,7 @@ def deploy(): def deploy_version(version): "Specify a specific version to be made live" - require('hosts', provided_by=[localhost,webserver]) - require('path') + require('hosts', 'path', provided_by=[localhost,webserver]) env.version = version with cd(env.path): run('rm releases/previous; mv releases/current releases/previous;', pty=True) @@ -99,6 +103,7 @@ def rollback(): # ===================================================================== def upload_tar_from_git(): "Create an archive from the current Git master branch and upload it" + print '>>> upload tar from git' require('release', provided_by=[deploy]) local('git archive --format=tar master | gzip > %(release)s.tar.gz' % env) run('mkdir -p %(path)s/releases/%(release)s' % env, pty=True) @@ -107,16 +112,32 @@ def upload_tar_from_git(): run('cd %(path)s/releases/%(release)s && tar zxf ../../packages/%(release)s.tar.gz' % env, pty=True) local('rm %(release)s.tar.gz' % env) +def upload_requirements_bundle(): + "Create a pybundle from requirements.txt file and upload it" + print '>>> upload requirements bundle' + require('release', provided_by=[deploy]) + requirements_mtime = os.path.getmtime('requirements.txt') + pybundle_mtime = 0 + try: + pybundle_mtime = os.path.getmtime('requirements.pybundle') + except os.error: + pass + if pybundle_mtime < requirements_mtime: + pip_options = file('pip-options.txt').read().strip() + local('pip bundle %s -r requirements.txt requirements.pybundle' % pip_options) + put('requirements.pybundle', '%(path)s/releases/%(release)s' % env) + def install_requirements(): "Install the required packages from the requirements file using pip" + print '>>> install requirements' require('release', provided_by=[deploy]) - pip_options = file('pip-options.txt').read().strip() with cd('%(path)s/releases/%(release)s' % env): - run('virtualenv --no-site-packages .') - run('pip install -E . %s -r requirements.txt' % pip_options) + run('%(virtualenv)s --no-site-packages .' % env) + run('%(pip)s install -E . requirements.pybundle' % env) def symlink_current_release(): "Symlink our current release" + print '>>> symlink current release' require('release', provided_by=[deploy]) require('path', provided_by=[staging, production]) with cd(env.path): @@ -130,6 +151,7 @@ def symlink_current_release(): def migrate(): "Update the database" + print '>>> migrate' require('project_name', provided_by=[staging, production]) with cd('%(path)s/releases/current/%(project_name)s' % env): run('../bin/python manage.py syncdb --noinput' % env, pty=True) @@ -137,6 +159,7 @@ def migrate(): def restart_webserver(): "Restart the web server" + print '>>> restart webserver' run('touch %(path)s/releases/current/%(project_name)s/%(project_name)s.wsgi' % env) # def install_site():