Guest User

Untitled

a guest
Sep 29th, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. #!/usr/bin/env rake
  2.  
  3. clone = {
  4. db_host: "user@server",
  5. rdbms: "postgresql", # postgresql or mysql
  6. prod_db: "db",
  7. prod_user: "user",
  8. prod_pass: "pass",
  9. dev_db: "localdb",
  10. dev_user: "user",
  11. dev_pass: "pass",
  12. remote_owner: "OWNER TO user_there",
  13. local_owner: "OWNER TO postgres"
  14. }
  15.  
  16. namespace :db do
  17. namespace :production do
  18. desc "Recreate the local development database as a clone of the remote production database"
  19. task :clone do
  20. case clone[:rdbms]
  21. when 'mysql'
  22. puts "Cloning from remote mysql"
  23. mysql_arguments = "-u#{clone[:prod_user]} -p#{[:prod_pass]} #{clone[:prod_db]}"
  24. `ssh #{clone[:db_host]} "rm /tmp/out.sql.bz2; mysqldump #{mysql_arguments} > /tmp/out.sql; bzip2 /tmp/out.sql"`
  25. `scp #{clone[:db_host]}:/tmp/out.sql.bz2 .`
  26. `bzcat out.sql.bz2 | mysql -u#{dev_user} -D#{clone[:dev_db]}`
  27. `rm out.sql.bz2`
  28. when 'postgresql'
  29. puts "Cloning from remote postgresql"
  30. pg_arguments = "-U #{clone[:prod_user]} #{clone[:prod_db]}"
  31. # REMOTE
  32. `ssh #{clone[:db_host]} "echo 'localhost:5432:#{clone[:prod_db]}:#{clone[:prod_user]}:#{clone[:prod_pass]}' > ~/.pgpass; chmod 0600 ~/.pgpass"`
  33. `ssh #{clone[:db_host]} "rm /tmp/out.sql.bz2; pg_dump #{pg_arguments} > /tmp/out.sql; bzip2 /tmp/out.sql"`
  34. `ssh #{clone[:db_host]} "rm ~/.pgpass"`
  35. `scp #{clone[:db_host]}:/tmp/out.sql.bz2 .`
  36.  
  37. # LOCAL
  38. pg_arguments = "-U #{clone[:dev_user]} -h localhost #{clone[:dev_db]}"
  39. `echo 'localhost:5432:#{clone[:dev_db]}:#{clone[:dev_user]}:#{clone[:dev_pass]}' > ~/.pgpass; chmod 0600 ~/.pgpass`
  40. `bzcat out.sql.bz2 | sed 's/#{clone[:remote_owner]}/#{clone[:local_owner]}/g' | psql #{pg_arguments}`
  41. `rm out.sql.bz2`
  42. `rm ~/.pgpass`
  43. else
  44. puts "Please configure clone[:rdbms] to connect to a remote host"
  45. end
  46. end
  47. end
  48. end
Add Comment
Please, Sign In to add comment