heroku_multi_backup 0.0.2 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +2 -1
- data/lib/Autobackup.rb +112 -0
- data/lib/heroku_multi_backup.rb +1 -0
- data/lib/heroku_multi_backup/version.rb +1 -1
- data/lib/railtie.rb +13 -0
- data/lib/tasks/heroku_multi_backup_autobackup.rake +7 -0
- metadata +14 -15
- data/.gitignore +0 -14
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -22
- data/heroku_multi_backup.gemspec +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07bcb1160672fdb4f88b5808c5de21ebcf7eaa90
|
4
|
+
data.tar.gz: 5725d256c3b0bff497186983e272f3eedb2a0d17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c60957556be84d2ec711765e9aef4a8a0335644928d04b110cbfced5cf4236564dbba28b6210c7bcff69af1cb3b240c171b9f465639401aa5edd88aca9eb6de
|
7
|
+
data.tar.gz: 4a2d60b9982a020a2085a8b8d160ae63498eaa6c148fabfb8423d19dda0cc6005ba32c0dcfb285ea3e6025657774bb0e468e710fc928070d95cd5fe6b20c5fc5
|
data/Rakefile
CHANGED
data/lib/Autobackup.rb
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
require "heroku/command/pg"
|
2
|
+
require "heroku/command/pg_backups"
|
3
|
+
require "heroku/api"
|
4
|
+
require "tmpdir"
|
5
|
+
require 'aws-sdk'
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
class Autobackup
|
10
|
+
attr_reader :client
|
11
|
+
attr_accessor :backup_url, :created_at
|
12
|
+
def self.call
|
13
|
+
new.call
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
def initialize(attrs={})
|
18
|
+
Heroku::Command.load
|
19
|
+
Heroku::Auth.credentials = [ ENV['HEROKU_USERNAME'], ENV['HEROKU_API_KEY'] ]
|
20
|
+
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def call
|
25
|
+
# initialize the heroku client interface
|
26
|
+
ENV['APPNAME'].split(",").each do |app|
|
27
|
+
execute_backup(app)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def execute_backup(appname)
|
32
|
+
puts "================================="
|
33
|
+
puts "Starting back up for "+appname
|
34
|
+
|
35
|
+
@client = Heroku::Command::Pg.new([], :app =>appname)
|
36
|
+
# database is standard database_url but is configurable in case the app has multiple DBs
|
37
|
+
begin
|
38
|
+
attachment = client.send(:generate_resolver).resolve(database)
|
39
|
+
|
40
|
+
# Actual backup interface to heroku
|
41
|
+
backup = client.send(:hpg_client, attachment).backups_capture
|
42
|
+
client.send(:poll_transfer, "backup", backup[:uuid])
|
43
|
+
puts "Backup complete ..."
|
44
|
+
# get the public url of the backup file for uploading to S3
|
45
|
+
self.backup_url = Heroku::Client::HerokuPostgresqlApp
|
46
|
+
.new(appname).transfers_public_url(backup[:num])[:url]
|
47
|
+
download_file(appname)
|
48
|
+
|
49
|
+
puts "Back up for "+ appname + " complete"
|
50
|
+
puts "================================="
|
51
|
+
rescue
|
52
|
+
puts "The application "+ appname + "is not accessible to you"
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
def download_file(dbname)
|
58
|
+
puts "Downloading file in local system"
|
59
|
+
# download the file from heroku and save it into a temp file
|
60
|
+
File.open(temp_file, "wb") do |output|
|
61
|
+
streamer = lambda do |chunk, remaining_bytes, total_bytes|
|
62
|
+
output.write chunk
|
63
|
+
end
|
64
|
+
|
65
|
+
# https://github.com/excon/excon/issues/475
|
66
|
+
Excon.get backup_url,
|
67
|
+
:response_block => streamer,
|
68
|
+
:omit_default_port => true
|
69
|
+
end
|
70
|
+
# initiate upload to S3
|
71
|
+
puts "Download complete..."
|
72
|
+
upload_file(temp_file,dbname)
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
def upload_file(filepath,dbname)
|
77
|
+
# code for actual s3 upload
|
78
|
+
puts "Uploading file in S3..."
|
79
|
+
Aws.config.update({
|
80
|
+
region: 'ap-southeast-1',
|
81
|
+
credentials: Aws::Credentials.new(ENV['S3_ACCESS_ID'],ENV['S3_ACCESS_SECRET'])
|
82
|
+
|
83
|
+
})
|
84
|
+
s3 = Aws::S3::Resource.new(region:ENV['S3_REGION'])
|
85
|
+
obj = s3.bucket(ENV['S3_BUCKET']).object(generate_file_name(dbname))
|
86
|
+
obj.upload_file(filepath)
|
87
|
+
puts "Upload Complete"
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
private
|
93
|
+
def database
|
94
|
+
"DATABASE_URL"
|
95
|
+
end
|
96
|
+
|
97
|
+
def temp_file
|
98
|
+
"#{Dir.tmpdir}/pgbackup"
|
99
|
+
end
|
100
|
+
def current_timestamp
|
101
|
+
Time.now.getutc.to_i
|
102
|
+
end
|
103
|
+
def current_time
|
104
|
+
Time.now.getutc.to_s
|
105
|
+
end
|
106
|
+
|
107
|
+
def generate_file_name(dbname)
|
108
|
+
'backup_for_'+dbname+"_"+current_timestamp.to_s+"("+current_time+")"
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
data/lib/heroku_multi_backup.rb
CHANGED
data/lib/railtie.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
if defined?(Rails)
|
2
|
+
if Rails.version < "3"
|
3
|
+
load "tasks/heroku_multi_backup_autobackup.rake"
|
4
|
+
else
|
5
|
+
module HerokuMultiBackup
|
6
|
+
class Railtie < Rails::Railtie
|
7
|
+
rake_tasks do
|
8
|
+
load "tasks/heroku_multi_backup_autobackup.rake"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: heroku_multi_backup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The Dark Lord
|
@@ -14,30 +14,30 @@ dependencies:
|
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
-
type: :
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pg
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -45,7 +45,7 @@ dependencies:
|
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
|
-
type: :
|
48
|
+
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
@@ -94,14 +94,13 @@ executables: []
|
|
94
94
|
extensions: []
|
95
95
|
extra_rdoc_files: []
|
96
96
|
files:
|
97
|
-
- ".gitignore"
|
98
|
-
- Gemfile
|
99
|
-
- LICENSE.txt
|
100
97
|
- README.md
|
101
98
|
- Rakefile
|
102
|
-
-
|
99
|
+
- lib/Autobackup.rb
|
103
100
|
- lib/heroku_multi_backup.rb
|
104
101
|
- lib/heroku_multi_backup/version.rb
|
102
|
+
- lib/railtie.rb
|
103
|
+
- lib/tasks/heroku_multi_backup_autobackup.rake
|
105
104
|
homepage: ''
|
106
105
|
licenses:
|
107
106
|
- MIT
|
data/.gitignore
DELETED
data/Gemfile
DELETED
data/LICENSE.txt
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
Copyright (c) 2015 The Dark Lord
|
2
|
-
|
3
|
-
MIT License
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
a copy of this software and associated documentation files (the
|
7
|
-
"Software"), to deal in the Software without restriction, including
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
the following conditions:
|
12
|
-
|
13
|
-
The above copyright notice and this permission notice shall be
|
14
|
-
included in all copies or substantial portions of the Software.
|
15
|
-
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/heroku_multi_backup.gemspec
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'heroku_multi_backup/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = "heroku_multi_backup"
|
8
|
-
spec.version = HerokuMultiBackup::VERSION
|
9
|
-
spec.authors = ["The Dark Lord"]
|
10
|
-
spec.email = ["contactme@rushabhhathi.com"]
|
11
|
-
spec.summary = %q{A Gem to create backups of multiple heroku apps and upload it to the specified Amazon S3 bucket.}
|
12
|
-
spec.description = %q{A Gem to create backups of multiple heroku apps and upload it to the specified Amazon S3 bucket.}
|
13
|
-
spec.homepage = ""
|
14
|
-
spec.license = "MIT"
|
15
|
-
|
16
|
-
spec.files = `git ls-files -z`.split("\x0")
|
17
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = ["lib"]
|
20
|
-
|
21
|
-
spec.add_development_dependency "bundler", "~> 1.7"
|
22
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
-
spec.add_development_dependency "pg"
|
24
|
-
spec.add_runtime_dependency "heroku", ">= 3.28.6", "<= 3.32"
|
25
|
-
spec.add_runtime_dependency "aws-sdk", '~> 2'
|
26
|
-
|
27
|
-
|
28
|
-
end
|