Bueno este post es sobre configuración de nuestro servidor ya sea desarrollo, pruebas o producción para todos es lo mismo ya depende del ambiente en el que anden.
Paso 1:
Saber que carpetas son las de trabajo por ejemplo /var/www/elsitio o /home/user/myapp bueno no se como tengan configurado esto, solo identifiquen para que sepan si se esta haciendo el deploy.
Paso 2:
Crear una carpeta para nuestro repositorio git, entrar en ella, en este caso nuestra carpeta de trabajo sera /var/www/elsitio (se supone que tenemos montado un sitio con apache en esa carpeta)
mkdir -p /home/git/elsitio.git
cd /home/git/elsitio.git
Paso 3:
Crear un repositorio vacio dentro de la carpeta elsitio.git, este repositorio es el que cuando le hagan un push obtendra los archivos nuevos y luego los colocara en /var/www/elsitio
git init --bare
Paso 4:
Una vez creada el repositorio entramos en la carpeta hooks y creamos el archivo post-recieve, este hook, se ejecutara cuando el repositorio reciba un push, y automaticamente copiara hacia nuestra carpeta de trabajo.
cd hooks
vi post-recieve
Paso 5:
Añadir el siguiente contenido a nuestro archivo para que ejecute la instruccion, despues guardarlo y hacerlo ejecutable con chmod+x
#!/bin/sh
git --work-tree=/var/www/elsitio --git-dir=/home/git/elsitio.git checkout -f
Lo guardas y lo haces ejecutable
chmod +x post-receive
Y listo ya quedo configurado el servidor, ahora en nuestro repositorio local hacemos lo siguiente:
git remote add production ssh://usuario@dominio/home/git/elstio.git
Ya con eso queda listo, cuando vayas a enviar todo a produccion solo haces
git push production
Y solo se encargara, bueno te pedira la contraseña de ssh pero esa ya la debes tener.
Aca una referencia en la que me base para hacer este tutorial.
Si quieren hacerlo con Rails es algo parecido solo que usen capistrano que ya viene medio configurado.