From 71a12e52dde092c2fb101d81c8e2eaa31151e9a4 Mon Sep 17 00:00:00 2001 From: Nick Sergeant Date: Sun, 23 Oct 2011 20:38:29 -0400 Subject: [PATCH] Removing fabfile and setting up for heroku --- fabfile.py | 215 ----------------------------------------------- requirements.txt | 35 +++----- 2 files changed, 13 insertions(+), 237 deletions(-) delete mode 100644 fabfile.py diff --git a/fabfile.py b/fabfile.py deleted file mode 100644 index d020314..0000000 --- a/fabfile.py +++ /dev/null @@ -1,215 +0,0 @@ -from __future__ import with_statement - -import os -from fabric.api import * -from dwfab.misc import growl as _growl - - -UPLOADS_DIR = 'media/uploads' -APPS_TO_SYNC = [ - 'contenttypes', - 'auth', - 'redirects', - 'sites', -] - -def prod(): - '''Run on the production site.''' - env.env_name = 'production' - env.hosts = ['nick@beta.snipt.net:38038'] - env.process_name = 'beta_snipt' - env.site_path = '/var/www/beta-snipt' - env.venv_path = '/home/nick/virtualenvs/beta-snipt' - env.site_url = 'https://beta.snipt.net/' - env.uploads_path = env.site_path + '/' + UPLOADS_DIR - - -def _python(cmd): - return env.venv_path.rstrip('/') + '/bin/python ' + cmd -def _lpython(cmd): - return os.getenv('VIRTUAL_ENV').rstrip('/') + '/bin/python ' + cmd -def _pip(cmd): - return env.venv_path.rstrip('/') + '/bin/pip ' + cmd - - -def pull_uploads(): - '''Copy the uploads from the site to your local machine.''' - require('uploads_path', provided_by=['prod']) - - sudo('chmod -R a+r "%s"' % env.uploads_path) - - rsync_command = r"""rsync -av -e 'ssh -p %s' %s@%s:%s %s""" % ( - env.port, - env.user, env.host, - env.uploads_path.rstrip('/') + '/', - UPLOADS_DIR.rstrip('/') - ) - print local(rsync_command, capture=False) - -def pull_data(): - '''Copy the data from the site to your local machine.''' - require('site_path', provided_by=['prod']) - require('venv_path', provided_by=['prod']) - - for app in APPS_TO_SYNC: - local(_lpython('manage.py reset --noinput %s' % app)) - local(_lpython('manage.py migrate --fake %s' % app)) - - for app in APPS_TO_SYNC: - with cd(env.site_path): - sudo(_python('manage.py dumpdata --format=json --indent=2 --natural ' + - '%s > snipt-fixtures-%s.json' % (app, app))) - get('%s/snipt-fixtures-%s.json' % (env.site_path, app), 'snipt-fixtures-%s.json' % app) - - local(_lpython('manage.py loaddata snipt-fixtures-%s.json' % app)) - -def pull_all(): - '''Copy the uploads and data from the site to your local machine.''' - pull_uploads() - pull_data() - _growl('Snipt: Pull Complete', 'The database and uploads have been refreshed.') - - -def reindex(): - require('site_path', provided_by=['prod']) - - with cd(env.site_path): - sudo(_python('manage.py rebuild_index --noinput')) - - -def syncdb(): - '''Run syncdb.''' - require('site_path', provided_by=['prod']) - require('venv_path', provided_by=['prod']) - - with cd(env.site_path): - sudo(_python('manage.py syncdb')) - -def migrate(): - '''Run any needed migrations.''' - require('site_path', provided_by=['prod']) - require('venv_path', provided_by=['prod']) - - with cd(env.site_path): - sudo(_python('manage.py migrate')) - -def requirements(): - '''Copy local requirements.txt to the site and install requirements.''' - require('site_path', provided_by=['prod']) - require('venv_path', provided_by=['prod']) - - with cd(env.site_path): - put('requirements.txt', 'requirements.txt') - run(_pip('install -r requirements.txt')) - run('hg revert requirements.txt') - - -def retag(): - '''Check which revision the site is at and update the local tag. - - Useful if someone else has deployed (which makes your production/staging local - tag incorrect. - ''' - require('site_path', provided_by=['prod']) - require('env_name', provided_by=['prod']) - - with cd(env.site_path): - current = run('hg id --rev . --quiet').strip(' \n+') - - local('hg tag --local --force %s --rev %s' % (env.env_name, current)) - -def deploy(rev='.'): - '''Deploy your current revision to the site. - - You can also specify a different revision to deploy by passing an argument: - - fab stag deploy:1a2cc06d - - You can use your local revision numbers as arguments -- the full hash will be - looked up and used. - ''' - require('site_path', provided_by=['prod']) - - rev = local('hg id --rev %s --quiet' % rev).strip(' \n+') - - local('hg push --rev %s' % rev) - - with cd(env.site_path): - run('hg tag --local --force previous') - run('hg pull --rev %s' % rev) - run('hg update --rev %s' % rev) - - retag() - - syncdb() - migrate() - - restart() - check() - - -def deploy_template(rev='.'): - '''Deploy your current revision to the site, without restarting the server. - - You can also specify a different revision to deploy by passing an argument: - - fab stag deploy:1a2cc06d - - You can use your local revision numbers as arguments -- the full hash will be - looked up and used. - ''' - require('site_path', provided_by=['prod']) - - rev = local('hg id --rev %s --quiet' % rev).strip(' \n+') - - local('hg push --rev %s' % rev) - - with cd(env.site_path): - run('hg tag --local --force previous') - run('hg pull --rev %s' % rev) - run('hg update --rev %s' % rev) - - retag() - check() - - -def rollback(): - '''Roll the site back to the version it was at before the last deployment. - - Things may break if migrations were made between the versions. TODO: Fix this. - ''' - require('site_path', provided_by=['prod']) - - with cd(env.site_path): - run('hg update previous') - - retag() - restart() - check() - -def check(): - '''Check that the home page of the site returns an HTTP 200. - - If it does, a normal growl message is sent. - - If it does not, a warning is issued and a sticky growl message is sent. - ''' - require('site_url', provided_by=['prod']) - - if not '200 OK' in run('curl --silent -I "%s"' % env.site_url): - warn("Something is wrong (we didn't get a 200 response)!") - _growl('Snipt: DEPLOYMENT ERROR', 'Something went wrong. Please investigate.', sticky=True) - else: - _growl('Snipt: Deployment Complete', 'Deployment finished, site is working.') - -def restart(): - '''Restart the site's gunicorn server.''' - require('site_path', provided_by=['prod']) - require('process_name', provided_by=['prod']) - - sudo('supervisorctl restart %s' % env.process_name) - - with cd(env.site_path): - sudo('chmod a+r media/css/*.css') - - diff --git a/requirements.txt b/requirements.txt index 232eb5d..c3505ac 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,29 +1,20 @@ -# Django --e git://github.com/django/django.git@1.3.X#egg=django --e git://github.com/dziegler/django-css.git#egg=django-css --e git://github.com/django-extensions/django-extensions.git#egg=django_extensions --e hg+http://bitbucket.org/offline/django-annoying#egg=django-annoying --e git://github.com/alex/django-templatetag-sugar.git#egg=templatetag_sugar --e hg+http://bitbucket.org/dwaiter/django-bcrypt#egg=django-bcrypt --e hg+ssh://hg@bitbucket.org/nicksergeant/django-registration#egg=django-registration --e svn+http://django-grappelli.googlecode.com/svn/trunk#egg=django-grappelli --e svn+http://django-pagination.googlecode.com/svn/trunk#egg=django-pagination --e hg+https://bitbucket.org/birkenfeld/pygments-main#egg=Pygments - -# Deployment --e git://github.com/bitprophet/fabric.git#egg=fabric --e git+http://github.com/benoitc/gunicorn.git#egg=gunicorn --e hg+ssh://hg@bitbucket.org/nicksergeant/dwfab#egg=dwfab - -# API --e git://github.com/toastdriven/django-tastypie.git#egg=django-tastypie - BeautifulSoup -django-taggit +Django +django-annoying +django-bcrypt +django-css +django-grappelli +django-pagination django-postmark +django-registration +django-taggit +django-tastypie +django-templatetag-sugar +gunicorn johnny-cache lxml -MySQL-python +psycopg2 +Pygments python-memcached pyyaml South