Guest User

Untitled

a guest
Jun 17th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 KB | None | 0 0
  1. # Directly copied from eycap-0.5.2 (thanks!)
  2. #
  3. # With these tasks you can:
  4. # - dump your production database and save it in current_path/db_backups
  5. # - dump your production into your local database (clone_to_local)
  6. #
  7. # Tested and fixed by fjguzman, prosenstein
  8.  
  9. namespace :db do
  10. task :backup_name, :roles => :db, :only => { :primary => true } do
  11. now = Time.now
  12. run "mkdir -p #{current_path}/db_backups"
  13. backup_time = [now.year,now.month,now.day,now.hour,now.min,now.sec].join('-')
  14. set :backup_file, "#{current_path}/db_backups/#{@environment_database}-snapshot-#{backup_time}.sql"
  15. end
  16.  
  17. desc "Backup your MySQL or PostgreSQL database to current_path+/db_backups"
  18. task :dump, :roles => :db, :only => {:primary => true} do
  19. run("cat #{current_path}/config/database.yml") { |channel, stream, data| @environment_info = YAML.load(data)[rails_env] }
  20. dbuser = @environment_info['username']
  21. dbpass = @environment_info['password']
  22. @environment_database = @environment_info['database']
  23. dbhost = @environment_info['host']
  24. dbhost_switch = "-h #{dbhost}" if dbhost && !dbhost.blank?
  25. backup_name
  26. if @environment_info['adapter'] == 'mysql'
  27. #dbhost = environment_dbhost.sub('-master', '') + '-replica' if dbhost != 'localhost' # added for Solo offering, which uses localhost
  28. run "mysqldump --add-drop-table -u #{dbuser} #{dbhost_switch} -p #{@environment_database} | bzip2 -c > #{backup_file}.bz2" do |ch, stream, out |
  29. ch.send_data "#{dbpass}\n" if out=~ /^Enter password:/
  30. end
  31. else
  32. run "pg_dump -W -c -U #{dbuser} #{dbhost_switch} #{@environment_database} | bzip2 -c > #{backup_file}.bz2" do |ch, stream, out |
  33. ch.send_data "#{dbpass}\n" if out=~ /^Password:/
  34. end
  35. end
  36. end
  37.  
  38. desc "Sync your production database to your local workstation"
  39. task :clone_to_local, :roles => :db, :only => {:primary => true} do
  40. dump
  41. get "#{backup_file}.bz2", "/tmp/#{application}.sql.bz2"
  42. development_info = YAML.load_file("config/database.yml")['development']
  43. dbhost = development_info['host']
  44. dbhost_switch = "-h #{dbhost}" if dbhost && !dbhost.blank?
  45. if development_info['adapter'] == 'mysql'
  46. run_str = "bzcat /tmp/#{application}.sql.bz2 | mysql -u #{development_info['username']} --password='#{development_info['password']}' #{dbhost_switch} #{development_info['database']}"
  47. else
  48. run_str = "PGPASSWORD=#{development_info['password']} bzcat /tmp/#{application}.sql.bz2 | psql -U #{development_info['username']} #{dbhost_switch} #{development_info['database']}"
  49. end
  50. %x!#{run_str}!
  51. end
  52. end
Add Comment
Please, Sign In to add comment