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.git
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.github
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.web
How to use it ?app
Add this line to your gemfile :ide
gem 'yaml_db'
Run bundler :this
bundle
To dump your data :code
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 :orm
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 :server
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 !htm
You can find more informations about yaml_db in it’s official GitHub repo :