Utilizo una secuencia de comandos que vuelca la base de datos a una ubicación particular, y una segunda que recupera el volcado y lo utiliza para restaurar una base de datos especificada. Yo uso la gema Siempre que programar copias de seguridad diarias (llamando a la primera secuencia de comandos), poniendo esto en el archivo schedule.rb:
every :day, :at => "05:00" do
command "/var/www/current/script/db_backup.sh -n #{@db_name}"
end
El contenido exacto de la secuencia de comandos de base de datos depende de lo que estés usando. Como estoy usando PostgreSQL, la secuencia de comandos de copia de seguridad, después de averiguar la ubicación adecuada para el vertedero, se ejecuta pg_dump:
pg_dump -F t -U username -f file_location<timestamp>.dat database_name
Y el guión 'restaurar', que utilizo para copiar la copia de seguridad de producción a una base de datos local para pruebas, utiliza pg_restore:
pg_restore -U username -O -x -d database_name_new path/to/file
Si está utilizando alguna otra base de datos, estas herramientas, obviamente, sería diferente, pero la mayoría de las bases de datos de copia de seguridad y restauración de apoyo de alguna forma.
Este es una buena solución y, como bonificación adicional, podría leer el nombre de usuario/contraseña del archivo database.yml. –
El único problema con la tarea de restauración es que mysqldump escribe una 'TABLA DE DEJADAS' y luego 'CREAR TABLA ...' para cada tabla. Si escribe migraciones que agregan tablas y luego ejecuta '' rake db: restore' sin haber migrado correctamente, las tablas adicionales no se descartarán (ya que no las habría escrito mysqldump). Por lo tanto, si desea una restauración "verdadera", primero debe soltar todas las tablas existentes y luego cargar el archivo .sql. – istrasci