set :application, "clever_name" set :user, "deploy" set :scm_username, "you" set :repository, "git@github.com:#{scm_username}/#{application}.git" set :deploy_to, "/var/www/apps/#{application}" set :scm, :git set :django_location, "/usr/local/django/trunk" set :django_admin_media, "/django/contrib/admin/media" set :domain, "example.com" role :app, domain role :web, domain role :db, domain, :primary => true # If you use a custom SSH port (a good idea): # ssh_options[:port] = 22 # -------- # Commands # -------- namespace :deploy do desc "Update project from repository" task :default do stream "cd #{deploy_to}; git pull" end desc "Setup a new project" task :cold do stream "git clone #{repository} #{deploy_to};" end end # Deploy desc "Link Admin media to the project media/ folder" task :admin_media do stream "ln -s #{django_location}#{django_admin_media} #{deploy_to}/public/media/admin" end after "deploy:cold", "admin_media" desc "Restart Apache" task :restart do sudo "/etc/init.d/apache2 restart" end after "deploy:cold", "restart" desc "Set SQLite3 permissions for Apache user" task :sqlite_perms do sudo "chgrp -R www-data #{deploy_to}/db; chmod -R 775 #{deploy_to}/db" end after "deploy:cold", "sqlite_perms" desc "Make sure database is in sync with models" task :syncdb do stream "#{deploy_to}/manage.py syncdb" end after "deploy:cold", "syncdb" desc "Don't use this" task :wipe_deployment do stream "rm -rf #{deploy_to}" end # ---- # Misc # ---- desc "Find the location of Python's site-packages folder" task :site_packages do stream "python -c 'from distutils.sysconfig import get_python_lib; print get_python_lib()'" end