What I do for one of my projects is develop on my local webserver, cvs checkin, and then ssh to the server and run /srv/cvs/project/CVS/install_server - which in turn checks the current user, runs itself under sudo (which is set up to allow any user to run this script as a particular non-root user without a password), and then extracts itself to the real webserver using a cvs update command.
An alternative is to make dist (or ./Build dist), and have some sort of private (and properly authenticated/authorised) page where you can just upload the distribution as a tar.gz file, and the CGI script can take it, uncompress it, unarchive it, build && build test && build install it, possibly followed by an rsync.
Basically, pretty much every step you're doing to get it into production (or into test, for that matter) should be automatable down to a single command. Generally speaking, I find this type of extra work to set up completely invaluable. Think "Lazy". Lots of work so you can be lazy. I started doing this type of thing not because I'm lazy, but because I'm error-prone. I hated typing in things and getting them wrong. But, if I taught the computer how to do my work for me, it was less likely to screw it up - once I successfully taught it in the first place.
| [reply] |