Version 59 (modified by Fran Boon, 13 years ago) ( diff )


Pakistan Deployment Cycle


We do daily upgrades of the systems from a single Fabric script:

  1. Upgrade Live with code release from UAT
  2. Refresh the UAT database with data from Live
  3. Upgrade UAT to Trunk code
  4. Send a notification to the List with a summary of the changes on both Test & Live


Login to

1st time:

cd /home/release
fab generate_keys
fab test distribute_keys
fab prod distribute_keys


cd /home/release
fab prod deploy
fab test deploy

Make a note of any upgrade issues with the migration on Test so that they can be streamlined in tomorrow's migration on Live

Sysadmin ToDo

1. Upgrade Live with code release from UAT

  • Extend maintenance_on() / maintenance_off()
    • Support Cron
  • Extend the cleanup()
    • Deal with .moved files
    • Only apply customisations to files which had conflicts
  • Do optimise()
    • Add indexes
    • compile application

2. Refresh the UAT database with data from Live

  • Include 'uploads' folder
  • Need to add generic role accounts in a script after the DB replaced

3. Upgrade UAT to Trunk code

  • pull
  • check for conflicts & copy all .THIS over (either parse the bzr output or search filesystem - whichever is easier/quicker)
  • migrate (CLI web2py load as 'su web2py')
  • check for migration failures in databases/sql.log
    • integrate
  • resolve any migration failures
    • let user know which table failed (in sql.log)
    • Collect MySQL username/password from /home/web2py/applications/eden/models/
         deployment_settings.database.username = "sahana"
         deployment_settings.database.password = "password"
    • Parse output from mysql -u root -p=password -e "show innodb status;"
    • Fix it automatically from the parsed output: ALTER TABLE {table_name} DROP FOREIGN KEY {table_name}_ibfk_{indexid};
  • migrateoff

4. Send a notification to the List with a summary of the changes on both Test & Live

Notifications can be built with info from the Trac Timeline


  • Set deployment_settings on UAT to the same as Prod
  • Add rollback() by reading VERSION before bzr pull, so then can bzr revert -r $version
  • Add update() for debian packages: SSH into each & apt-get update; apt-get upgrade
  • Enhance Apache Maintenance site
    • allowing access to site through a browser - but using a different name (which we don't publish)
    • improving the text on the maintenance page: /var/www/maintenance.html
  • instance needs adding to the Fabfile
    • This shouldn't be fully-automated into the upgrades cycle, but does have a script to refresh data from live manually
    • dev. will be postgres!


  • Get MapProxy working (basic install on 'geo' done)


  • Update Demo (whilst keeping the logins there intact - all other data can be dropped)


  • Investigate a fix or alternative to for allowing Trac users to register bugs anonymously whilst not locking out our testing team.
  • Convert from sqlite to PostgreSQL (or MySQL) to improve performance
  • See if we can not send emails out to users for the updates they make themselves




Note: See TracWiki for help on using the wiki.