backup 4.2.3 → 4.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -5
- data/lib/backup.rb +1 -0
- data/lib/backup/config/dsl.rb +1 -1
- data/lib/backup/notifier/mail.rb +1 -4
- data/lib/backup/storage/dropbox.rb +0 -24
- data/lib/backup/storage/qiniu.rb +65 -0
- data/lib/backup/version.rb +1 -1
- data/templates/cli/storages/qiniu +12 -0
- metadata +55 -28
- data/LICENSE.md +0 -24
- data/lib/backup/storage/ninefold.rb +0 -74
- data/templates/cli/storages/ninefold +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7e4e7ea9006f973c8df272ad4520265fb5a25e1
|
4
|
+
data.tar.gz: ce45e91cc9d2b80f721cbcda2f4012fce936fb7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 866350af1103a7eeb171bd80d01c73d4a728f31eda444823b4250d3788d09402f6cbca600a6dfc0d48e05c0c74a2746fd68dee230b847acff3ba7d92a2a8bb07
|
7
|
+
data.tar.gz: b0585f85c576423c12291990521ad7d33a82fc6d1cadf97b009e332bbc8e0a42840b3debb9cd382291115e2282bbaa1f5b18088fa0dd6fde98e8edacc7f90e2b
|
data/README.md
CHANGED
@@ -14,10 +14,10 @@ was built with modularity, extensibility and simplicity in mind.
|
|
14
14
|
|
15
15
|
Please use the Backup features [issue tracker][Features] to suggest new features.
|
16
16
|
Only use the Backup gem [issue tracker][Issues] for bugs and other issues.
|
17
|
-
We're also available on [Gitter]
|
17
|
+
We're also available on [Gitter] for questions and problems.
|
18
18
|
|
19
|
-
**Copyright (c) 2009-
|
20
|
-
Released under the **MIT** [
|
19
|
+
**Copyright (c) 2009-2016 [Michael van Rooijen][] ( [@mrrooijen] )**
|
20
|
+
Released under the **MIT** [LICENSE](LICENSE).
|
21
21
|
|
22
22
|
[Installation]: http://backup.github.io/backup/v4/installation
|
23
23
|
[Release Notes]: http://backup.github.io/backup/v4/release-notes
|
@@ -25,5 +25,5 @@ Released under the **MIT** [License](LICENSE.md).
|
|
25
25
|
[Issues]: https://github.com/backup/backup/issues
|
26
26
|
[Features]: https://github.com/backup/backup-features/issues
|
27
27
|
[Gitter]: https://gitter.im/backup/backup?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
|
28
|
-
[Michael van Rooijen]: http://
|
29
|
-
[@
|
28
|
+
[Michael van Rooijen]: http://github.com/mrrooijen
|
29
|
+
[@mrrooijen]: http://twitter.com/mrrooijen
|
data/lib/backup.rb
CHANGED
data/lib/backup/config/dsl.rb
CHANGED
@@ -30,7 +30,7 @@ module Backup
|
|
30
30
|
['MySQL', 'PostgreSQL', 'MongoDB', 'Redis', 'Riak', 'OpenLDAP', 'SQLite'],
|
31
31
|
# Storages
|
32
32
|
['S3', 'CloudFiles', 'Ninefold', 'Dropbox', 'FTP',
|
33
|
-
'SFTP', 'SCP', 'RSync', 'Local'],
|
33
|
+
'SFTP', 'SCP', 'RSync', 'Local', 'Qiniu'],
|
34
34
|
# Compressors
|
35
35
|
['Gzip', 'Bzip2', 'Custom', 'Pbzip2', 'Lzma'],
|
36
36
|
# Encryptors
|
data/lib/backup/notifier/mail.rb
CHANGED
@@ -215,11 +215,8 @@ module Backup
|
|
215
215
|
when 'test' then {}
|
216
216
|
end
|
217
217
|
|
218
|
-
::Mail.defaults do
|
219
|
-
delivery_method method.to_sym, options
|
220
|
-
end
|
221
|
-
|
222
218
|
email = ::Mail.new
|
219
|
+
email.delivery_method method.to_sym, options
|
223
220
|
email.to = to
|
224
221
|
email.from = from
|
225
222
|
email.cc = cc
|
@@ -210,27 +210,3 @@ module Backup
|
|
210
210
|
end
|
211
211
|
end
|
212
212
|
end
|
213
|
-
|
214
|
-
# Patch for dropbox-ruby-sdk-1.5.1
|
215
|
-
class DropboxClient
|
216
|
-
class ChunkedUploader
|
217
|
-
def upload(chunk_size = 1024**2 * 4)
|
218
|
-
while @offset < @total_size
|
219
|
-
@file_obj.seek(@offset) unless @file_obj.pos == @offset
|
220
|
-
data = @file_obj.read(chunk_size)
|
221
|
-
|
222
|
-
begin
|
223
|
-
resp = @client.parse_response(
|
224
|
-
@client.partial_chunked_upload(data, @upload_id, @offset)
|
225
|
-
)
|
226
|
-
rescue DropboxError => err
|
227
|
-
resp = JSON.parse(err.http_response.body) rescue {}
|
228
|
-
raise err unless resp['offset']
|
229
|
-
end
|
230
|
-
|
231
|
-
@offset = resp['offset']
|
232
|
-
@upload_id ||= resp['upload_id']
|
233
|
-
end
|
234
|
-
end
|
235
|
-
end
|
236
|
-
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'qiniu'
|
3
|
+
|
4
|
+
module Backup
|
5
|
+
module Storage
|
6
|
+
class Qiniu < Base
|
7
|
+
include Storage::Cycler
|
8
|
+
class Error < Backup::Error; end
|
9
|
+
|
10
|
+
##
|
11
|
+
# Qiniu API credentials
|
12
|
+
attr_accessor :access_key, :secret_key
|
13
|
+
|
14
|
+
##
|
15
|
+
# Qiniu bucket name
|
16
|
+
attr_accessor :bucket
|
17
|
+
|
18
|
+
def initialize(model, storage_id = nil)
|
19
|
+
super
|
20
|
+
|
21
|
+
@path ||= 'backups'
|
22
|
+
|
23
|
+
check_configuration
|
24
|
+
config_credentials
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
def transfer!
|
29
|
+
package.filenames.each do |filename|
|
30
|
+
src = File.join(Config.tmp_path, filename)
|
31
|
+
dest = File.join(remote_path, filename)
|
32
|
+
Logger.info "Storing '#{ dest }'..."
|
33
|
+
|
34
|
+
::Qiniu.upload_file(uptoken: ::Qiniu.generate_upload_token,
|
35
|
+
bucket: bucket,
|
36
|
+
file: src,
|
37
|
+
key: dest)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Called by the Cycler.
|
42
|
+
# Any error raised will be logged as a warning.
|
43
|
+
def remove!(package)
|
44
|
+
Logger.info "Removing backup package dated #{ package.time }..."
|
45
|
+
remote_path = remote_path_for(package)
|
46
|
+
package.filenames.each do |filename|
|
47
|
+
::Qiniu.delete(bucket, File.join(remote_path, filename))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def check_configuration
|
52
|
+
required = %w{ access_key secret_key bucket }
|
53
|
+
|
54
|
+
raise Error, <<-EOS if required.map {|name| send(name) }.any?(&:nil?)
|
55
|
+
Configuration Error
|
56
|
+
#{ required.map {|name| "##{ name }"}.join(', ') } are all required
|
57
|
+
EOS
|
58
|
+
end
|
59
|
+
|
60
|
+
def config_credentials
|
61
|
+
::Qiniu.establish_connection!(access_key: access_key, secret_key: secret_key)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/backup/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael van Rooijen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: CFPropertyList
|
@@ -128,14 +128,14 @@ dependencies:
|
|
128
128
|
requirements:
|
129
129
|
- - '='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 1.5
|
131
|
+
version: 1.6.5
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - '='
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 1.5
|
138
|
+
version: 1.6.5
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: equalizer
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -576,14 +576,14 @@ dependencies:
|
|
576
576
|
requirements:
|
577
577
|
- - '='
|
578
578
|
- !ruby/object:Gem::Version
|
579
|
-
version: 2.
|
579
|
+
version: 2.6.3
|
580
580
|
type: :runtime
|
581
581
|
prerelease: false
|
582
582
|
version_requirements: !ruby/object:Gem::Requirement
|
583
583
|
requirements:
|
584
584
|
- - '='
|
585
585
|
- !ruby/object:Gem::Version
|
586
|
-
version: 2.
|
586
|
+
version: 2.6.3
|
587
587
|
- !ruby/object:Gem::Dependency
|
588
588
|
name: memoizable
|
589
589
|
requirement: !ruby/object:Gem::Requirement
|
@@ -604,14 +604,14 @@ dependencies:
|
|
604
604
|
requirements:
|
605
605
|
- - '='
|
606
606
|
- !ruby/object:Gem::Version
|
607
|
-
version:
|
607
|
+
version: 2.4.3
|
608
608
|
type: :runtime
|
609
609
|
prerelease: false
|
610
610
|
version_requirements: !ruby/object:Gem::Requirement
|
611
611
|
requirements:
|
612
612
|
- - '='
|
613
613
|
- !ruby/object:Gem::Version
|
614
|
-
version:
|
614
|
+
version: 2.4.3
|
615
615
|
- !ruby/object:Gem::Dependency
|
616
616
|
name: mini_portile
|
617
617
|
requirement: !ruby/object:Gem::Requirement
|
@@ -702,14 +702,28 @@ dependencies:
|
|
702
702
|
requirements:
|
703
703
|
- - '='
|
704
704
|
- !ruby/object:Gem::Version
|
705
|
-
version: 2.
|
705
|
+
version: 3.2.0
|
706
706
|
type: :runtime
|
707
707
|
prerelease: false
|
708
708
|
version_requirements: !ruby/object:Gem::Requirement
|
709
709
|
requirements:
|
710
710
|
- - '='
|
711
711
|
- !ruby/object:Gem::Version
|
712
|
-
version: 2.
|
712
|
+
version: 3.2.0
|
713
|
+
- !ruby/object:Gem::Dependency
|
714
|
+
name: netrc
|
715
|
+
requirement: !ruby/object:Gem::Requirement
|
716
|
+
requirements:
|
717
|
+
- - '='
|
718
|
+
- !ruby/object:Gem::Version
|
719
|
+
version: 0.11.0
|
720
|
+
type: :runtime
|
721
|
+
prerelease: false
|
722
|
+
version_requirements: !ruby/object:Gem::Requirement
|
723
|
+
requirements:
|
724
|
+
- - '='
|
725
|
+
- !ruby/object:Gem::Version
|
726
|
+
version: 0.11.0
|
713
727
|
- !ruby/object:Gem::Dependency
|
714
728
|
name: nokogiri
|
715
729
|
requirement: !ruby/object:Gem::Requirement
|
@@ -753,75 +767,89 @@ dependencies:
|
|
753
767
|
- !ruby/object:Gem::Version
|
754
768
|
version: 2.0.0
|
755
769
|
- !ruby/object:Gem::Dependency
|
756
|
-
name:
|
770
|
+
name: qiniu
|
757
771
|
requirement: !ruby/object:Gem::Requirement
|
758
772
|
requirements:
|
759
773
|
- - '='
|
760
774
|
- !ruby/object:Gem::Version
|
761
|
-
version:
|
775
|
+
version: 6.5.1
|
762
776
|
type: :runtime
|
763
777
|
prerelease: false
|
764
778
|
version_requirements: !ruby/object:Gem::Requirement
|
765
779
|
requirements:
|
766
780
|
- - '='
|
767
781
|
- !ruby/object:Gem::Version
|
768
|
-
version:
|
782
|
+
version: 6.5.1
|
769
783
|
- !ruby/object:Gem::Dependency
|
770
|
-
name:
|
784
|
+
name: rest-client
|
771
785
|
requirement: !ruby/object:Gem::Requirement
|
772
786
|
requirements:
|
773
787
|
- - '='
|
774
788
|
- !ruby/object:Gem::Version
|
775
|
-
version:
|
789
|
+
version: 1.7.3
|
776
790
|
type: :runtime
|
777
791
|
prerelease: false
|
778
792
|
version_requirements: !ruby/object:Gem::Requirement
|
779
793
|
requirements:
|
780
794
|
- - '='
|
781
795
|
- !ruby/object:Gem::Version
|
782
|
-
version:
|
796
|
+
version: 1.7.3
|
783
797
|
- !ruby/object:Gem::Dependency
|
784
|
-
name:
|
798
|
+
name: ruby-hmac
|
785
799
|
requirement: !ruby/object:Gem::Requirement
|
786
800
|
requirements:
|
787
801
|
- - '='
|
788
802
|
- !ruby/object:Gem::Version
|
789
|
-
version: 0.
|
803
|
+
version: 0.4.0
|
790
804
|
type: :runtime
|
791
805
|
prerelease: false
|
792
806
|
version_requirements: !ruby/object:Gem::Requirement
|
793
807
|
requirements:
|
794
808
|
- - '='
|
795
809
|
- !ruby/object:Gem::Version
|
796
|
-
version: 0.
|
810
|
+
version: 0.4.0
|
797
811
|
- !ruby/object:Gem::Dependency
|
798
|
-
name:
|
812
|
+
name: simple_oauth
|
799
813
|
requirement: !ruby/object:Gem::Requirement
|
800
814
|
requirements:
|
801
815
|
- - '='
|
802
816
|
- !ruby/object:Gem::Version
|
803
|
-
version: 0.
|
817
|
+
version: 0.2.0
|
804
818
|
type: :runtime
|
805
819
|
prerelease: false
|
806
820
|
version_requirements: !ruby/object:Gem::Requirement
|
807
821
|
requirements:
|
808
822
|
- - '='
|
809
823
|
- !ruby/object:Gem::Version
|
810
|
-
version: 0.
|
824
|
+
version: 0.2.0
|
811
825
|
- !ruby/object:Gem::Dependency
|
812
|
-
name:
|
826
|
+
name: thor
|
813
827
|
requirement: !ruby/object:Gem::Requirement
|
814
828
|
requirements:
|
815
829
|
- - '='
|
816
830
|
- !ruby/object:Gem::Version
|
817
|
-
version:
|
831
|
+
version: 0.18.1
|
818
832
|
type: :runtime
|
819
833
|
prerelease: false
|
820
834
|
version_requirements: !ruby/object:Gem::Requirement
|
821
835
|
requirements:
|
822
836
|
- - '='
|
823
837
|
- !ruby/object:Gem::Version
|
824
|
-
version:
|
838
|
+
version: 0.18.1
|
839
|
+
- !ruby/object:Gem::Dependency
|
840
|
+
name: thread_safe
|
841
|
+
requirement: !ruby/object:Gem::Requirement
|
842
|
+
requirements:
|
843
|
+
- - '='
|
844
|
+
- !ruby/object:Gem::Version
|
845
|
+
version: 0.1.3
|
846
|
+
type: :runtime
|
847
|
+
prerelease: false
|
848
|
+
version_requirements: !ruby/object:Gem::Requirement
|
849
|
+
requirements:
|
850
|
+
- - '='
|
851
|
+
- !ruby/object:Gem::Version
|
852
|
+
version: 0.1.3
|
825
853
|
- !ruby/object:Gem::Dependency
|
826
854
|
name: twitter
|
827
855
|
requirement: !ruby/object:Gem::Requirement
|
@@ -890,7 +918,6 @@ executables:
|
|
890
918
|
extensions: []
|
891
919
|
extra_rdoc_files: []
|
892
920
|
files:
|
893
|
-
- LICENSE.md
|
894
921
|
- README.md
|
895
922
|
- bin/backup
|
896
923
|
- lib/backup.rb
|
@@ -952,7 +979,7 @@ files:
|
|
952
979
|
- lib/backup/storage/dropbox.rb
|
953
980
|
- lib/backup/storage/ftp.rb
|
954
981
|
- lib/backup/storage/local.rb
|
955
|
-
- lib/backup/storage/
|
982
|
+
- lib/backup/storage/qiniu.rb
|
956
983
|
- lib/backup/storage/rsync.rb
|
957
984
|
- lib/backup/storage/s3.rb
|
958
985
|
- lib/backup/storage/scp.rb
|
@@ -1004,7 +1031,7 @@ files:
|
|
1004
1031
|
- templates/cli/storages/dropbox
|
1005
1032
|
- templates/cli/storages/ftp
|
1006
1033
|
- templates/cli/storages/local
|
1007
|
-
- templates/cli/storages/
|
1034
|
+
- templates/cli/storages/qiniu
|
1008
1035
|
- templates/cli/storages/rsync
|
1009
1036
|
- templates/cli/storages/s3
|
1010
1037
|
- templates/cli/storages/scp
|
data/LICENSE.md
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
|
2
|
-
Copyright (c) 2009-2013 Michael van Rooijen ( [@meskyanichi](http://twitter.com/#!/meskyanichi) )
|
3
|
-
=================================================================================================
|
4
|
-
|
5
|
-
The "Backup" RubyGem is released under the **MIT LICENSE**
|
6
|
-
----------------------------------------------------------
|
7
|
-
|
8
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
9
|
-
of this software and associated documentation files (the "Software"), to deal
|
10
|
-
in the Software without restriction, including without limitation the rights
|
11
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
12
|
-
copies of the Software, and to permit persons to whom the Software is
|
13
|
-
furnished to do so, subject to the following conditions:
|
14
|
-
|
15
|
-
The above copyright notice and this permission notice shall be included in
|
16
|
-
all copies or substantial portions of the Software.
|
17
|
-
|
18
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
21
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
22
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
|
-
THE SOFTWARE.
|
@@ -1,74 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'fog'
|
3
|
-
|
4
|
-
module Backup
|
5
|
-
module Storage
|
6
|
-
class Ninefold < Base
|
7
|
-
include Storage::Cycler
|
8
|
-
class Error < Backup::Error; end
|
9
|
-
|
10
|
-
##
|
11
|
-
# Ninefold Credentials
|
12
|
-
attr_accessor :storage_token, :storage_secret
|
13
|
-
|
14
|
-
def initialize(model, storage_id = nil)
|
15
|
-
super
|
16
|
-
|
17
|
-
@path ||= 'backups'
|
18
|
-
path.sub!(/^\//, '')
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def connection
|
24
|
-
@connection ||= Fog::Storage.new(
|
25
|
-
:provider => 'Ninefold',
|
26
|
-
:ninefold_storage_token => storage_token,
|
27
|
-
:ninefold_storage_secret => storage_secret
|
28
|
-
)
|
29
|
-
end
|
30
|
-
|
31
|
-
def transfer!
|
32
|
-
directory = directory_for(remote_path, true)
|
33
|
-
package.filenames.each do |filename|
|
34
|
-
src = File.join(Config.tmp_path, filename)
|
35
|
-
dest = File.join(remote_path, filename)
|
36
|
-
Logger.info "Storing '#{ dest }'..."
|
37
|
-
File.open(src, 'r') do |file|
|
38
|
-
directory.files.create(:key => filename, :body => file)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
##
|
44
|
-
# Queries the connection for the directory for the given +remote_path+
|
45
|
-
# Returns nil if not found, or creates the directory if +create+ is true.
|
46
|
-
def directory_for(remote_path, create = false)
|
47
|
-
directory = connection.directories.get(remote_path)
|
48
|
-
if directory.nil? && create
|
49
|
-
directory = connection.directories.create(:key => remote_path)
|
50
|
-
end
|
51
|
-
directory
|
52
|
-
end
|
53
|
-
|
54
|
-
# Called by the Cycler.
|
55
|
-
# Any error raised will be logged as a warning.
|
56
|
-
def remove!(package)
|
57
|
-
Logger.info "Removing backup package dated #{ package.time }..."
|
58
|
-
|
59
|
-
remote_path = remote_path_for(package)
|
60
|
-
directory = directory_for(remote_path)
|
61
|
-
|
62
|
-
raise Error, "Directory at '#{ remote_path }' not found" unless directory
|
63
|
-
|
64
|
-
package.filenames.each do |filename|
|
65
|
-
file = directory.files.get(filename)
|
66
|
-
file.destroy if file
|
67
|
-
end
|
68
|
-
|
69
|
-
directory.destroy
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
##
|
2
|
-
# Ninefold Cloud Storage [Storage]
|
3
|
-
#
|
4
|
-
store_with Ninefold do |nf|
|
5
|
-
nf.storage_token = "my_storage_token"
|
6
|
-
nf.storage_secret = "my_storage_secret"
|
7
|
-
nf.path = "/path/to/my/backups"
|
8
|
-
nf.keep = 10
|
9
|
-
# nf.keep = Time.now - 2592000 # Remove all backups older than 1 month.
|
10
|
-
end
|