Como volcar y restaurar data semilla para tu base de datos
Casi siempre en nuestra aplicación necesitamos que la base de datos este con algún contenido basico como para empezar a probar como por ejemplo: paises, ciudades, un usuario administrador, etc. Pues bien muchas veces tenemos que llenar esos datos manualmente y cuando se nos daña por algun motivo la base de datos o queremos llevar nuestra aplicación a producción, la tarea de llenar la base de datos con esos datos “semilla” se complica si no tenemos nada automatizado, pues bien como para muchas cosas en Rails, existe un plugin que nos facilita esa tarea, les presento a: Dataset, podemos instalarlo mediante:
script/plugin install svn://code.logicleaf.com/rails-plugins/dataset
El plugin basicamente lo que hace es crearnos unas tareas que podran ser usadas mediante rake que usaran el mecanismo empleado por los fixtures para volcar y restaurar la data hacia las tablas, por ejemplo para volcar la data de nuestro modelo Distrito(tabla distritos) hacemos lo siguiente:
rake db:dataset:dump_fixtures DATASET=demo INCLUDE=Distrito
Lo que hara esa tarea sera crear el directorio db/dataset/demo y ahi crear el archivo distritos.yml con todos los registros volcados de la tabla distritos.
Mas adelante cuando necesitemos restaurar esos registros, debemos ejecutar otra tarea rake, pero antes de esto vamos a modificar la tarea que viene con el plugin para que no cargue todo nuestro esquema de la base de datos que se encuentra en “db/schema.rb” sino mas bien que solo cargue el entorno de nuestra aplicación, el archivo a editar se encuentra en ‘vendor/plugins/dataset/tasks/dataset_tasks.rake’, debemos cambiar esta linea:
task :load_fixtures => 'db:schema:load' do
por esta otra:
task :load_fixtures => :environment do
Luego podemos restaurar nuestra data con:
rake db:dataset:load_fixtures DATASET=demo
Si queremos volcar o restaurar data de una base datos diferente al entorno en el que estamos simplemente tenemos que especificar el entorno antes del comando rake:
RAILS_ENV=production rake db:dataset:load_fixtures DATASET=demo
Ojala que te haya sido útil ;).