Attempt to add traceback logging
[redakcja.git] / fabfile.py
index 5fcb36e..a936eb2 100644 (file)
@@ -1,5 +1,6 @@
 from __future__ import with_statement # needed for python 2.5
 from fabric.api import *
 from __future__ import with_statement # needed for python 2.5
 from fabric.api import *
+from fabric.contrib import files
 
 import os
 
 
 import os
 
@@ -15,12 +16,12 @@ env.use_south = False
 def staging():
     """Use staging server"""
     env.hosts = ['stigma.nowoczesnapolska.org.pl:2222']
 def staging():
     """Use staging server"""
     env.hosts = ['stigma.nowoczesnapolska.org.pl:2222']
-    env.user = 'zuber'
+    env.user = 'platforma'
     env.path = '/var/services/platforma'
     env.python = '/usr/bin/python'
     env.virtualenv = '/usr/bin/virtualenv'
     env.pip = '/usr/bin/pip'
     env.path = '/var/services/platforma'
     env.python = '/usr/bin/python'
     env.virtualenv = '/usr/bin/virtualenv'
     env.pip = '/usr/bin/pip'
-    
+
 def production():
     """Use production server"""
     env.hosts = ['wolnelektury.pl:22123']
 def production():
     """Use production server"""
     env.hosts = ['wolnelektury.pl:22123']
@@ -36,7 +37,7 @@ def production():
 # =========
 def test():
     "Run the test suite and bail out if it fails"
 # =========
 def test():
     "Run the test suite and bail out if it fails"
-    require('hosts', 'path', provided_by=[staging, production])
+    require('hosts', 'path', provided_by = [staging, production])
     result = run('cd %(path)s/%(project_name)s; %(python)s manage.py test' % env)
 
 def setup():
     result = run('cd %(path)s/%(project_name)s; %(python)s manage.py test' % env)
 
 def setup():
@@ -44,10 +45,11 @@ def setup():
     Setup a fresh virtualenv as well as a few useful directories, then run
     a full deployment. virtualenv and pip should be already installed.
     """
     Setup a fresh virtualenv as well as a few useful directories, then run
     a full deployment. virtualenv and pip should be already installed.
     """
-    require('hosts', 'path', provided_by=[staging, production])
+    require('hosts', 'path', provided_by = [staging, production])
 
 
-    run('mkdir -p %(path)s; cd %(path)s; %(virtualenv)s --no-site-packages .;' % env, pty=True)
-    run('cd %(path)s; mkdir releases; mkdir shared; mkdir packages;' % env, pty=True)
+    run('mkdir -p %(path)s; cd %(path)s; %(virtualenv)s --no-site-packages .;' % env, pty = True)
+    run('cd %(path)s; mkdir releases; mkdir shared; mkdir packages;' % env, pty = True)
+    run('cd %(path)s/releases; ln -s . current; ln -s . previous' % env, pty = True)
     deploy()
 
 def deploy():
     deploy()
 
 def deploy():
@@ -56,25 +58,27 @@ def deploy():
     install any required third party modules, 
     install the virtual host and then restart the webserver
     """
     install any required third party modules, 
     install the virtual host and then restart the webserver
     """
-    require('hosts', 'path', provided_by=[staging, production])
+    require('hosts', 'path', provided_by = [staging, production])
 
     import time
     env.release = time.strftime('%Y-%m-%dT%H%M')
 
     upload_tar_from_git()
 
     import time
     env.release = time.strftime('%Y-%m-%dT%H%M')
 
     upload_tar_from_git()
-    upload_pybundle()
+    upload_wsgi_script()
+    upload_vhost_sample()
     install_requirements()
     install_requirements()
+    copy_localsettings()
     symlink_current_release()
     migrate()
     restart_webserver()
 
 def deploy_version(version):
     "Specify a specific version to be made live"
     symlink_current_release()
     migrate()
     restart_webserver()
 
 def deploy_version(version):
     "Specify a specific version to be made live"
-    require('hosts', 'path', provided_by=[localhost,webserver])
+    require('hosts', 'path', provided_by = [localhost, webserver])
     env.version = version
     with cd(env.path):
     env.version = version
     with cd(env.path):
-        run('rm releases/previous; mv releases/current releases/previous;', pty=True)
-        run('ln -s %(version)s releases/current' % env, pty=True)
+        run('rm releases/previous; mv releases/current releases/previous;', pty = True)
+        run('ln -s %(version)s releases/current' % env, pty = True)
     restart_webserver()
 
 def rollback():
     restart_webserver()
 
 def rollback():
@@ -82,12 +86,12 @@ def rollback():
     Limited rollback capability. Simple loads the previously current
     version of the code. Rolling back again will swap between the two.
     """
     Limited rollback capability. Simple loads the previously current
     version of the code. Rolling back again will swap between the two.
     """
-    require('hosts', provided_by=[staging, production])
+    require('hosts', provided_by = [staging, production])
     require('path')
     with cd(env.path):
     require('path')
     with cd(env.path):
-        run('mv releases/current releases/_previous;', pty=True)
-        run('mv releases/previous releases/current;', pty=True)
-        run('mv releases/_previous releases/previous;', pty=True)
+        run('mv releases/current releases/_previous;', pty = True)
+        run('mv releases/previous releases/current;', pty = True)
+        run('mv releases/_previous releases/previous;', pty = True)
     restart_webserver()
 
 
     restart_webserver()
 
 
@@ -97,47 +101,45 @@ def rollback():
 def upload_tar_from_git():
     "Create an archive from the current Git master branch and upload it"
     print '>>> upload tar from git'
 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])
+    require('release', provided_by = [deploy])
     local('git archive --format=tar master | gzip > %(release)s.tar.gz' % env)
     local('git archive --format=tar master | gzip > %(release)s.tar.gz' % env)
-    run('mkdir -p %(path)s/releases/%(release)s' % env, pty=True)
-    run('mkdir -p %(path)s/packages' % env, pty=True)
+    run('mkdir -p %(path)s/releases/%(release)s' % env, pty = True)
+    run('mkdir -p %(path)s/packages' % env, pty = True)
     put('%(release)s.tar.gz' % env, '%(path)s/packages/' % env)
     put('%(release)s.tar.gz' % env, '%(path)s/packages/' % env)
-    run('cd %(path)s/releases/%(release)s && tar zxf ../../packages/%(release)s.tar.gz' % env, pty=True)
+    run('cd %(path)s/releases/%(release)s && tar zxf ../../packages/%(release)s.tar.gz' % env, pty = True)
     local('rm %(release)s.tar.gz' % env)
 
     local('rm %(release)s.tar.gz' % env)
 
+def upload_vhost_sample():
+    "Create and upload Apache virtual host configuration sample"
+    print ">>> upload vhost sample"
+    files.upload_template('%(project_name)s.vhost.template' % env, '%(path)s/%(project_name)s.vhost.sample' % env, context = env)
+
+def upload_wsgi_script():
+    "Create and upload a wsgi script sample"
+    print ">>> upload wsgi script sample"
+    files.upload_template('%(project_name)s.wsgi.template' % env, '%(path)s/%(project_name)s.wsgi' % env, context = env)
+    run('chmod ug+x %(path)s/%(project_name)s.wsgi' % env)
+
 def install_requirements():
     "Install the required packages from the requirements file using pip"
     print '>>> install requirements'
 def install_requirements():
     "Install the required packages from the requirements file using pip"
     print '>>> install requirements'
-    require('release', provided_by=[deploy])
-    run('cd %(path)s; %(pip)s install -E . requirements.pybundle' % env)
-
-def upload_pybundle():
-    "Create pybundle with required libraries and upload it"
-    print ">>> upload pybundle"
-    require('release', provided_by=[deploy])
-    with settings(warn_only=True):
-        pip_options = run('cat %(path)s/releases/%(release)s/pip-options.txt' % env)
-        if pip_options.failed:
-            env.pip_options = ''
-        else:
-            env.pip_options = pip_options
-            
-    requirements_mtime = os.path.getmtime('requirements.txt')
-    bundle_mtime = 0
-    try:
-        bundle_mtime = os.path.getmtime('requirements.pybundle')
-    except os.error:
-        pass
-
-    if requirements_mtime > bundle_mtime:
-        local('pip bundle requirements.pybundle %(pip_options)s -r requirements.txt' % env)
-        put('requirements.pybundle', '%(path)s' % env)
+    require('release', provided_by = [deploy])
+    run('cd %(path)s; %(pip)s install -E . -r %(path)s/releases/%(release)s/requirements.txt' % env, pty = True)
+
+def copy_localsettings():
+    "Copy localsettings.py from root directory to release directory (if this file exists)"
+    print ">>> copy localsettings"
+    require('release', provided_by = [deploy])
+    require('path', provided_by = [staging, production])
+
+    with settings(warn_only = True):
+        run('cp %(path)s/localsettings.py %(path)s/releases/%(release)s/%(project_name)s' % env)
 
 def symlink_current_release():
     "Symlink our current release"
     print '>>> symlink current release'
 
 def symlink_current_release():
     "Symlink our current release"
     print '>>> symlink current release'
-    require('release', provided_by=[deploy])
-    require('path', provided_by=[staging, production])
+    require('release', provided_by = [deploy])
+    require('path', provided_by = [staging, production])
     with cd(env.path):
         run('rm releases/previous; mv releases/current releases/previous')
         run('ln -s %(release)s releases/current' % env)
     with cd(env.path):
         run('rm releases/previous; mv releases/current releases/previous')
         run('ln -s %(release)s releases/current' % env)
@@ -145,11 +147,11 @@ def symlink_current_release():
 def migrate():
     "Update the database"
     print '>>> migrate'
 def migrate():
     "Update the database"
     print '>>> migrate'
-    require('project_name', provided_by=[staging, production])
+    require('project_name', provided_by = [staging, production])
     with cd('%(path)s/releases/current/%(project_name)s' % env):
     with cd('%(path)s/releases/current/%(project_name)s' % env):
-        run('../../../bin/python manage.py syncdb --noinput' % env, pty=True)
+        run('../../../bin/python manage.py syncdb --noinput' % env, pty = True)
         if env.use_south:
         if env.use_south:
-            run('../../../bin/python manage.py migrate' % env, pty=True)
+            run('../../../bin/python manage.py migrate' % env, pty = True)
 
 def restart_webserver():
     "Restart the web server"
 
 def restart_webserver():
     "Restart the web server"