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 :