Differences

This shows you the differences between two versions of the page.

Link to this comparison view

how_to_transfer_data_seamlessly_between_various_ruby_on_rails_environments_and_databases [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== 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
 +
 +
 +===== References =====
 +  - http://​github.com/​ludicast/​yaml_db