Removing fabfile and setting up for heroku

master
Nick Sergeant 2011-10-23 20:38:29 -04:00
parent e85150947a
commit 71a12e52dd
2 changed files with 13 additions and 237 deletions

215
fabfile.py vendored
View File

@ -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')

View File

@ -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