Last Updated: February 25, 2016
·
11.28K
· omarkamali

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 :

gem ‘yaml_db’

Run bundler :

bundle

To dump your data :

bundle exec rake db:data:dump

To load your data :
bundle exec rake db:data:load
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 :

RAILS_ENV=development bundle exec rake db:data:dump
RAILS_ENV=production bundle exec rake db:data:load

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 :

heroku run bundle exec rake db:data:load

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 GitHub repo :

http://github.com/ludicast/yaml_db

2 Responses
Add your response

The ludicast version doesn't work for Rails4 - try the fork written by jetthoughts at https://github.com/jetthoughts/yaml_db, or the one written by zweitag, at https://github.com/zweitag/yaml_db which has additional features.

over 1 year ago ·

The original gem by ludicast doesn't work on Rails4. Try one of the following forks:

https://github.com/jetthoughts/yaml_db
https://github.com/zweitag/yaml_db

over 1 year ago ·