heroku-db-sync 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # HerokuDbSync
2
+
3
+ Adds rake tasks to perform backup and restore between heroku remotes
4
+
5
+ ## Usage
6
+
7
+ gem 'heroku-db-sync'
8
+
9
+ #backup production and copy to localdevelopment pg db
10
+ rake db:sync:heroku:local
11
+
12
+ #backup production and overwrite staging db
13
+ rake db:sync:heroku:staging
14
+
15
+ you may also specify remotes
16
+
17
+ rake db:sync:heroku:remote[staging,production]
18
+ #where to_remote:staging and from_remote:production
19
+
20
+ ## Contributing
21
+
22
+ 1. Fork it
23
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
24
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
25
+ 4. Push to the branch (`git push origin my-new-feature`)
26
+ 5. Create new Pull Request
27
+
28
+
29
+ ## License
30
+
31
+ This project rocks and uses MIT-LICENSE.
@@ -7,22 +7,23 @@ module HerokuDbSync
7
7
  to_remote = arguments[:to_remote]
8
8
 
9
9
  puts "(1/4) capturing #{from_remote} database snapshot..."
10
- `heroku pgbackups:capture --expire --remote #{from_remote}`
10
+ run "heroku pgbackups:capture --expire --remote #{from_remote}"
11
11
 
12
12
  if to_remote
13
- puts "2/4 fetching backup url from remote #{from_remote}"
14
- backup_url = `heroku pgbackups:url --remote #{from_remote}`
15
- puts "(3/4) backing up #{to_remote} and restoring it to snapshot from #{from_remote} ... "
16
- `heroku pgbackups:capture --expire --remote #{to_remote}`
13
+ puts "(2/4) fetching backup url from remote #{from_remote}"
14
+ backup_url = runr("heroku pgbackups:url --remote #{from_remote}")
15
+ print "(3/4) backing up #{to_remote} and restoring it to snapshot from #{from_remote} ... "
16
+ run "heroku pgbackups:capture --expire --remote #{to_remote}"
17
+ puts "captured. restoring .."
17
18
  restore_cmd = "heroku pgbackups:restore DATABASE '#{backup_url}' --remote #{to_remote}"
18
19
  puts restore_cmd
19
- system(restore_cmd) # use 'system' as heroku prompts for confirmation of db restore.
20
+ run restore_cmd # use 'system' as heroku prompts for confirmation of db restore.
20
21
  puts "(4/4) restarting remote #{to_remote}"
21
- `heroku restart --remote #{to_remote}`
22
+ run "heroku restart --remote #{to_remote}"
22
23
  else
23
24
  dumpfile = 'latest.dump'
24
25
  puts "(2/4) downloading snapshot..."
25
- `curl -o #{dumpfile} \`heroku pgbackups:url --remote #{from_remote}\``
26
+ run "curl -o #{dumpfile} \`heroku pgbackups:url --remote #{from_remote}\`"
26
27
  puts "(3/4) restoring snapshot to #{host} database #{database} ... "
27
28
  `pg_restore --verbose --clean --no-acl --no-owner -h #{host} -U #{user} -d #{database} #{dumpfile}`
28
29
  keep = arguments[:keepdump] || false
@@ -52,5 +53,18 @@ module HerokuDbSync
52
53
  def self.db_config
53
54
  @_db_config ||= Rails.configuration.database_configuration[Rails.env].with_indifferent_access
54
55
  end
56
+
57
+ private
58
+ # Execute commands using system. This command returns true or false if it was a success.
59
+ # system() also allows prompts to be shown. This is needed for the restore command, heroku asks the user to type the application name
60
+ def self.run command
61
+ system(command) || raise("ERROR running < #{command} >. Look above for details")
62
+ end
63
+
64
+ # Execute command using ` `. This returns the result as a string, empty if it failed.
65
+ def self.runr command
66
+ res = `#{command}`.strip
67
+ res.empty? ? raise("ERROR running < #{command} >. Empty result. Look above for details") : res
68
+ end
55
69
  end
56
70
  end
@@ -1,3 +1,3 @@
1
1
  module HerokuDbSync
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -7,12 +7,12 @@ namespace :db do
7
7
  HerokuDbSync::TaskHelper.perform_sync arguments.to_hash.merge({to_remote: nil})
8
8
  end
9
9
 
10
- desc 'sync heroku DB from other heroku. default from_remote=production and to_remote=staging'
10
+ desc 'sync staging heroku DB from production heroku DB. default from_remote=production and to_remote=staging'
11
11
  task :staging, [:from_remote] do | task, arguments |
12
12
  HerokuDbSync::TaskHelper.perform_sync arguments.to_hash.merge({to_remote: 'staging'})
13
13
  end
14
14
 
15
- desc 'sync heroku DB from other heroku. default from_remote=production and to_remote=staging'
15
+ desc 'sync [to_remote] heroku DB from [from_remote] heroku DB. default from_remote=production and to_remote=staging'
16
16
  task :remote, [:to_remote, :from_remote ] do | task, arguments |
17
17
  raise "must set from_remote ('git remote' for heroku)" unless arguments[:from_remote]
18
18
  raise "must set to_remote ('git remote' for heroku)" unless arguments[:to_remote]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heroku-db-sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-13 00:00:00.000000000 Z
12
+ date: 2013-09-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -72,7 +72,7 @@ files:
72
72
  - lib/tasks/heroku-db-sync_tasks.rake
73
73
  - MIT-LICENSE
74
74
  - Rakefile
75
- - README.rdoc
75
+ - README.md
76
76
  - test/dummy/app/assets/javascripts/application.js
77
77
  - test/dummy/app/assets/stylesheets/application.css
78
78
  - test/dummy/app/controllers/application_controller.rb
data/README.rdoc DELETED
@@ -1,3 +0,0 @@
1
- = HerokuDbSync2
2
-
3
- This project rocks and uses MIT-LICENSE.