Dumping and restoring data with the YamlDB gem in Rails
What is YamlDB (yaml_db)?
YamlDb is a Rails plugin and a gem for dumping and restoring data in YAML format. It complements the database-independent schema format found in db/schema.rb. The data is saved into db/data.yml.
Some Real-world usages
- Backup data in YAML format (database-independent)
- Restore YAML data to virtually any database
- Switching from say SQLite to mySQL, or other databases
- Replicate production database data to development database with ease
You can find out how to do all of this in the following blogs:
http://www.railslodge.com/plugins/830-yaml-db
http://accidentaltechnologist.com/ruby/change-databases-in-rails-with-yamldb/
http://blog.heroku.com/archives/2007/11/23/yamldb_for_databaseindependent_data_dumps/
This plugin/gem is really good, the only thing I think it's lacking of is a command-line utility. Why? Because some times you only need to switch the database engine or replicate data one time, why would we have to install a plugin to a specific Rails application if we can have a command-line that works for all the Rails application we work in?
One of the main issues is that yaml_db works with rake tasks so although it's a gem you have to install the rake tasks in your Rails application manually.
That was the main reason I forked the yaml_db project and added it a command-line utility, the only think you'd need to do is to install my fork of the yaml_db gem, not the official one.
For instructions to install my fork click here.
Once installed just issue:
$ yaml_db -h
to see the help.
Usage:
yaml_db task environment
- task must be an existing rake task in the yaml_db plugin.
Dumping and restoring data with the command-line utility
yaml_db won't work if you're outside a Rails app folder, so...
$ cd ~/projects/my_dummy_rails_application
Replicate production database data to the development one
$ yaml_db data:dump production $ yaml_db data:load development
Dumping production schema to db/schema.rb and data to db/data.yml
$ yaml_db dump production
Loading db/schema.rb and db/data.yml to development database
$ yaml_db load #environment defaults to development
