====== How to transfer data seamlessly between various Ruby on Rails environments and databases ======

+

Sometimes, you cannot just seed your Rails database. This could be due to the complexity of the data itself, which may turn the creation of your seeds.rb file into a pure nightmare. In such cases, one of the possible solutions is to process all your data manually, through your web app UI, for example.

+

+

However, how would you make the data available to your application in the production environment ? Furthermore,​ you may not be able to cut off your production server while you make the necessary changes.

+

+

Fortunately,​ there is a neat solution to this problem. It's a gem called '​**yaml_db**',​ that provides an intermediary dump format for your data ( by default, it outputs and reads data from **db/​data.yml** ), and two very helpful commands.

+

+

How to use it ?

+

+

Add this line to your gemfile :

+

<sxh bash>

+

gem '​yaml_db'​

+

</​sxh>​

+

+

Run bundler :

+

<sxh bash>

+

bundle

+

</​sxh>​

+

+

To dump your data :

+

<sxh bash>

+

bundle exec rake db:​data:​dump

+

</​sxh>​

+

+

To load your data :

+

<sxh bash>

+

bundle exec rake db:​data:​load

+

</​sxh> ​

+

You can specify the environment using RAILS_ENV variable. The following example dumps data from the development database and pushes it to the production db :

+

+

<sxh bash>

+

RAILS_ENV=development bundle exec rake db:​data:​dump

+

RAILS_ENV=production bundle exec rake db:​data:​load

+

</​sxh>​

+

+

As a side note, I found this gem to be particularily handy when I have to transfer data from my localhost ( for example ) to a heroku instance. Assuming that you have dumped your database, properly added db/data.yml to the repository, and updated your heroku app with your latest code version, all you have to do is to run the following command :

+

+

<sxh bash>

+

heroku run bundle exec rake db:​data:​load

+

</​sxh>​

+

+

Please note that this method doesn’t reset your data but rather merges your actual database with data.yml content. Be careful not to import it more than once !

+

+

You can find more informations about yaml_db in it's official <​nowiki>​GitHub</​nowiki>​ repo : http://​github.com/​ludicast/​yaml_db