backup 3.0.16 → 3.0.18
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +10 -0
- data/Gemfile.lock +50 -47
- data/Guardfile +3 -3
- data/README.md +136 -81
- data/backup.gemspec +3 -2
- data/bin/backup +36 -15
- data/lib/backup.rb +30 -20
- data/lib/backup/cli.rb +30 -2
- data/lib/backup/compressor/lzma.rb +63 -0
- data/lib/backup/configuration/compressor/lzma.rb +23 -0
- data/lib/backup/configuration/helpers.rb +10 -4
- data/lib/backup/configuration/notifier/mail.rb +5 -0
- data/lib/backup/configuration/storage/dropbox.rb +19 -4
- data/lib/backup/configuration/storage/ftp.rb +4 -0
- data/lib/backup/configuration/storage/local.rb +17 -0
- data/lib/backup/configuration/storage/ninefold.rb +20 -0
- data/lib/backup/configuration/storage/rsync.rb +4 -0
- data/lib/backup/database/postgresql.rb +12 -3
- data/lib/backup/database/redis.rb +5 -1
- data/lib/backup/dependency.rb +11 -12
- data/lib/backup/encryptor/gpg.rb +2 -0
- data/lib/backup/exception/command_failed.rb +8 -0
- data/lib/backup/finder.rb +49 -9
- data/lib/backup/notifier/mail.rb +7 -1
- data/lib/backup/notifier/twitter.rb +1 -1
- data/lib/backup/storage/dropbox.rb +93 -16
- data/lib/backup/storage/ftp.rb +10 -3
- data/lib/backup/storage/local.rb +78 -0
- data/lib/backup/storage/ninefold.rb +96 -0
- data/lib/backup/storage/rsync.rb +37 -20
- data/lib/backup/storage/s3.rb +1 -1
- data/lib/backup/storage/scp.rb +1 -1
- data/lib/backup/syncer/rsync.rb +1 -1
- data/lib/backup/version.rb +1 -1
- data/lib/templates/compressor/lzma +7 -0
- data/lib/templates/storage/dropbox +2 -2
- data/lib/templates/storage/ftp +8 -7
- data/lib/templates/storage/local +7 -0
- data/lib/templates/storage/ninefold +9 -0
- data/lib/templates/storage/rsync +1 -0
- data/spec/archive_spec.rb +0 -1
- data/spec/compressor/bzip2_spec.rb +0 -1
- data/spec/compressor/gzip_spec.rb +0 -1
- data/spec/compressor/lzma_spec.rb +58 -0
- data/spec/configuration/compressor/bzip2_spec.rb +28 -0
- data/spec/configuration/compressor/lzma_spec.rb +28 -0
- data/spec/configuration/database/mongodb_spec.rb +16 -0
- data/spec/configuration/database/mysql_spec.rb +17 -0
- data/spec/configuration/database/postgresql_spec.rb +17 -0
- data/spec/configuration/database/redis_spec.rb +16 -0
- data/spec/configuration/notifier/campfire_spec.rb +11 -0
- data/spec/configuration/notifier/mail_spec.rb +20 -0
- data/spec/configuration/notifier/presently_spec.rb +34 -0
- data/spec/configuration/notifier/twitter_spec.rb +12 -0
- data/spec/configuration/storage/dropbox_spec.rb +0 -6
- data/spec/configuration/storage/ftp_spec.rb +15 -12
- data/spec/configuration/storage/local_spec.rb +28 -0
- data/spec/configuration/storage/ninefold_spec.rb +31 -0
- data/spec/configuration/storage/rsync_spec.rb +2 -0
- data/spec/database/mongodb_spec.rb +0 -1
- data/spec/database/mysql_spec.rb +0 -1
- data/spec/database/postgresql_spec.rb +31 -11
- data/spec/database/redis_spec.rb +9 -4
- data/spec/encryptor/gpg_spec.rb +1 -1
- data/spec/encryptor/open_ssl_spec.rb +0 -1
- data/spec/logger_spec.rb +32 -24
- data/spec/model_spec.rb +15 -15
- data/spec/spec_helper.rb +8 -4
- data/spec/storage/base_spec.rb +0 -4
- data/spec/storage/cloudfiles_spec.rb +0 -1
- data/spec/storage/dropbox_spec.rb +44 -14
- data/spec/storage/ftp_spec.rb +26 -15
- data/spec/storage/local_spec.rb +83 -0
- data/spec/storage/ninefold_spec.rb +142 -0
- data/spec/storage/object_spec.rb +1 -1
- data/spec/storage/rsync_spec.rb +17 -7
- data/spec/storage/s3_spec.rb +4 -3
- data/spec/storage/scp_spec.rb +0 -1
- data/spec/storage/sftp_spec.rb +0 -1
- data/spec/syncer/rsync_spec.rb +8 -8
- metadata +62 -36
data/.travis.yml
ADDED
data/Gemfile.lock
CHANGED
@@ -1,34 +1,34 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
|
5
|
-
addressable (2.2.
|
4
|
+
Platform (0.4.0)
|
5
|
+
addressable (2.2.6)
|
6
6
|
builder (3.0.0)
|
7
7
|
crack (0.1.8)
|
8
8
|
diff-lcs (1.1.2)
|
9
|
-
dropbox (1.
|
9
|
+
dropbox (1.3.0)
|
10
10
|
json (>= 1.2.0)
|
11
|
-
|
12
|
-
multipart-post (>= 1.0)
|
11
|
+
multipart-post (>= 1.1.0)
|
13
12
|
oauth (>= 0.3.6)
|
14
|
-
excon (0.
|
15
|
-
faraday (0.
|
16
|
-
addressable (~> 2.2.
|
13
|
+
excon (0.6.6)
|
14
|
+
faraday (0.7.4)
|
15
|
+
addressable (~> 2.2.6)
|
17
16
|
multipart-post (~> 1.1.0)
|
18
|
-
rack (
|
19
|
-
faraday_middleware (0.
|
20
|
-
faraday (~> 0.
|
17
|
+
rack (>= 1.1.0, < 2)
|
18
|
+
faraday_middleware (0.7.0)
|
19
|
+
faraday (~> 0.7.3)
|
21
20
|
ffi (1.0.9)
|
22
|
-
fog (0.
|
21
|
+
fog (0.11.0)
|
23
22
|
builder
|
24
|
-
excon (
|
25
|
-
formatador (
|
26
|
-
json
|
23
|
+
excon (~> 0.6.5)
|
24
|
+
formatador (~> 0.2.0)
|
27
25
|
mime-types
|
28
|
-
|
29
|
-
|
26
|
+
multi_json (~> 1.0.3)
|
27
|
+
net-scp (~> 1.0.4)
|
28
|
+
net-ssh (~> 2.1.4)
|
29
|
+
nokogiri (~> 1.5.0)
|
30
30
|
ruby-hmac
|
31
|
-
formatador (0.
|
31
|
+
formatador (0.2.1)
|
32
32
|
fuubar (0.0.5)
|
33
33
|
rspec (~> 2.0)
|
34
34
|
rspec-instafail (~> 0.1.4)
|
@@ -38,33 +38,34 @@ GEM
|
|
38
38
|
thor (~> 0.14.6)
|
39
39
|
guard-rspec (0.3.1)
|
40
40
|
guard (>= 0.2.2)
|
41
|
-
hashie (1.
|
41
|
+
hashie (1.1.0)
|
42
42
|
httparty (0.7.4)
|
43
43
|
crack (= 0.1.8)
|
44
|
-
i18n (0.
|
45
|
-
json (1.5.
|
44
|
+
i18n (0.6.0)
|
45
|
+
json (1.5.4)
|
46
46
|
libnotify (0.5.5)
|
47
|
-
mail (2.
|
48
|
-
activesupport (>= 2.3.6)
|
47
|
+
mail (2.3.0)
|
49
48
|
i18n (>= 0.4.0)
|
50
49
|
mime-types (~> 1.16)
|
51
50
|
treetop (~> 1.4.8)
|
52
|
-
mechanize (1.0.0)
|
53
|
-
nokogiri (>= 1.2.1)
|
54
51
|
mime-types (1.16)
|
55
52
|
mocha (0.9.12)
|
56
|
-
multi_json (
|
57
|
-
multi_xml (0.
|
58
|
-
multipart-post (1.1.
|
53
|
+
multi_json (1.0.3)
|
54
|
+
multi_xml (0.3.0)
|
55
|
+
multipart-post (1.1.3)
|
59
56
|
net-scp (1.0.4)
|
60
57
|
net-ssh (>= 1.99.1)
|
61
58
|
net-sftp (2.0.5)
|
62
59
|
net-ssh (>= 2.0.9)
|
63
|
-
net-ssh (2.1.
|
64
|
-
nokogiri (1.
|
65
|
-
oauth (0.4.
|
66
|
-
|
67
|
-
|
60
|
+
net-ssh (2.1.4)
|
61
|
+
nokogiri (1.5.0)
|
62
|
+
oauth (0.4.5)
|
63
|
+
open4 (1.1.0)
|
64
|
+
polyglot (0.3.2)
|
65
|
+
popen4 (0.1.2)
|
66
|
+
Platform (>= 0.4.0)
|
67
|
+
open4 (>= 0.4.0)
|
68
|
+
rack (1.3.2)
|
68
69
|
rb-fsevent (0.4.0)
|
69
70
|
rb-inotify (0.8.5)
|
70
71
|
ffi (>= 0.5.0)
|
@@ -79,25 +80,26 @@ GEM
|
|
79
80
|
rspec-mocks (2.5.0)
|
80
81
|
ruby-hmac (0.4.0)
|
81
82
|
ruby-progressbar (0.0.10)
|
82
|
-
simple_oauth (0.1.
|
83
|
+
simple_oauth (0.1.5)
|
83
84
|
thor (0.14.6)
|
84
85
|
timecop (0.3.5)
|
85
|
-
treetop (1.4.
|
86
|
+
treetop (1.4.10)
|
87
|
+
polyglot
|
86
88
|
polyglot (>= 0.3.1)
|
87
|
-
twitter (1.1
|
88
|
-
faraday (~> 0.
|
89
|
-
faraday_middleware (~> 0.
|
90
|
-
hashie (~> 1.
|
91
|
-
multi_json (~> 0.0
|
92
|
-
multi_xml (~> 0.
|
93
|
-
simple_oauth (~> 0.1.
|
89
|
+
twitter (1.7.1)
|
90
|
+
faraday (~> 0.7.4)
|
91
|
+
faraday_middleware (~> 0.7.0)
|
92
|
+
hashie (~> 1.1.0)
|
93
|
+
multi_json (~> 1.0.0)
|
94
|
+
multi_xml (~> 0.3.0)
|
95
|
+
simple_oauth (~> 0.1.5)
|
94
96
|
|
95
97
|
PLATFORMS
|
96
98
|
ruby
|
97
99
|
|
98
100
|
DEPENDENCIES
|
99
|
-
dropbox (~> 1.
|
100
|
-
fog (
|
101
|
+
dropbox (~> 1.3.0)
|
102
|
+
fog (>= 0.11.0)
|
101
103
|
fuubar
|
102
104
|
growl
|
103
105
|
guard
|
@@ -105,13 +107,14 @@ DEPENDENCIES
|
|
105
107
|
httparty (~> 0.7.4)
|
106
108
|
json (~> 1.5.1)
|
107
109
|
libnotify
|
108
|
-
mail (~> 2.
|
110
|
+
mail (~> 2.3.0)
|
109
111
|
mocha
|
110
112
|
net-scp (~> 1.0.4)
|
111
113
|
net-sftp (~> 2.0.5)
|
112
|
-
net-ssh (~> 2.1.
|
114
|
+
net-ssh (~> 2.1.4)
|
115
|
+
popen4 (~> 0.1.2)
|
113
116
|
rb-fsevent
|
114
117
|
rb-inotify
|
115
118
|
rspec
|
116
119
|
timecop
|
117
|
-
twitter (
|
120
|
+
twitter (>= 1.7.1)
|
data/Guardfile
CHANGED
@@ -7,10 +7,10 @@
|
|
7
7
|
|
8
8
|
guard 'rspec',
|
9
9
|
:version => 2,
|
10
|
-
:rvm => ['1.9.2', '1.8.7', 'ree'],
|
10
|
+
:rvm => ['1.9.3', '1.9.2', '1.8.7', 'ree'],
|
11
11
|
:bundler => true,
|
12
|
-
:cli => '--color --format Fuubar
|
13
|
-
|
12
|
+
:cli => '--color --format Fuubar' do
|
13
|
+
|
14
14
|
watch(%r{^spec/.+_spec\.rb})
|
15
15
|
watch(%r{^lib/(.+)\.rb}) { 'spec' }
|
16
16
|
watch('spec/spec_helper.rb') { 'spec' }
|
data/README.md
CHANGED
@@ -3,6 +3,7 @@ Backup 3
|
|
3
3
|
|
4
4
|
Backup is a RubyGem, written for Linux and Mac OSX, that allows you to easily perform backup operations on both your remote, as well as your local environment. It provides you with an elegant DSL in Ruby for modeling (configuring) your backups. Backup has built-in support for various databases, storage protocols/services, syncers, compressors, encryptors and notifiers which you can mix and match. It was built with modularity, extensibility and simplicity in mind.
|
5
5
|
|
6
|
+
[![Build Status](https://secure.travis-ci.org/meskyanichi/backup.png)](http://travis-ci.org/meskyanichi/backup)
|
6
7
|
|
7
8
|
Author
|
8
9
|
------
|
@@ -29,7 +30,7 @@ I recommend you read this README first, and refer to the [Wiki pages](https://gi
|
|
29
30
|
What Backup 3 currently supports
|
30
31
|
================================
|
31
32
|
|
32
|
-
Below you find a list of components that Backup currently supports.
|
33
|
+
Below you find a list of components that Backup currently supports. If you'd like support for components other than the ones listed here, feel free to request them or to fork Backup and add them yourself. Backup is modular and easy to extend with new components.
|
33
34
|
|
34
35
|
Database Support
|
35
36
|
----------------
|
@@ -54,7 +55,8 @@ Storage Locations and Services
|
|
54
55
|
|
55
56
|
- Amazon Simple Storage Service (S3)
|
56
57
|
- Rackspace Cloud Files (Mosso)
|
57
|
-
-
|
58
|
+
- Ninefold Cloud Storage
|
59
|
+
- Dropbox Web Service
|
58
60
|
- Remote Servers *(Available Protocols: FTP, SFTP, SCP and RSync)*
|
59
61
|
|
60
62
|
[Storage Wiki Page](https://github.com/meskyanichi/backup/wiki/Storages)
|
@@ -65,7 +67,8 @@ Storage Features
|
|
65
67
|
- Backup Cycling, applies to:
|
66
68
|
- Amazon Simple Storage Service (S3)
|
67
69
|
- Rackspace Cloud Files (Mosso)
|
68
|
-
-
|
70
|
+
- Ninefold Cloud Storage
|
71
|
+
- Dropbox Web Service
|
69
72
|
- Remote Servers *(Only Protocols: FTP, SFTP, SCP)*
|
70
73
|
- Incremental Backups, applies to:
|
71
74
|
- Remote Servers *(Only Protocols: RSync)*
|
@@ -85,6 +88,7 @@ Compressors
|
|
85
88
|
|
86
89
|
- Gzip
|
87
90
|
- Bzip2
|
91
|
+
- Lzma
|
88
92
|
|
89
93
|
[Compressors Wiki Page](https://github.com/meskyanichi/backup/wiki/Compressors)
|
90
94
|
|
@@ -109,6 +113,7 @@ Notifiers
|
|
109
113
|
Supported Ruby versions (Tested with RSpec)
|
110
114
|
-------------------------------------------
|
111
115
|
|
116
|
+
- Ruby 1.9.3-preview1
|
112
117
|
- Ruby 1.9.2
|
113
118
|
- Ruby 1.8.7
|
114
119
|
- Ruby Enterprise Edition 1.8.7
|
@@ -119,87 +124,92 @@ A sample Backup configuration file
|
|
119
124
|
|
120
125
|
This is a Backup configuration file. Check it out and read the explanation below. Backup has a [great wiki](https://github.com/meskyanichi/backup/wiki) which explains each component of Backup in detail.
|
121
126
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
notify_by Mail do |mail|
|
177
|
-
mail.on_success = false
|
178
|
-
mail.on_failure = true
|
179
|
-
end
|
180
|
-
|
181
|
-
notify_by Twitter do |tweet|
|
182
|
-
tweet.on_success = true
|
183
|
-
tweet.on_failure = true
|
184
|
-
end
|
185
|
-
|
127
|
+
``` rb
|
128
|
+
Backup::Model.new(:sample_backup, 'A sample backup configuration') do
|
129
|
+
|
130
|
+
database MySQL do |database|
|
131
|
+
database.name = 'my_sample_mysql_db'
|
132
|
+
database.username = 'my_username'
|
133
|
+
database.password = 'my_password'
|
134
|
+
database.skip_tables = ['logs']
|
135
|
+
database.additional_options = ['--single-transaction', '--quick']
|
136
|
+
end
|
137
|
+
|
138
|
+
database MongoDB do |database|
|
139
|
+
database.name = 'my_sample_mongo_db'
|
140
|
+
database.only_collections = ['users', 'events', 'posts']
|
141
|
+
end
|
142
|
+
|
143
|
+
archive :user_avatars do |archive|
|
144
|
+
archive.add '/var/apps/my_sample_app/public/avatars'
|
145
|
+
end
|
146
|
+
|
147
|
+
archive :logs do |archive|
|
148
|
+
archive.add '/var/apps/my_sample_app/logs/production.log'
|
149
|
+
archive.add '/var/apps/my_sample_app/logs/newrelic_agent.log'
|
150
|
+
archive.add '/var/apps/my_sample_app/logs/other/'
|
151
|
+
archive.exclude '/var/apps/my_sample_app/logs/other/exclude-this.log'
|
152
|
+
end
|
153
|
+
|
154
|
+
encrypt_with OpenSSL do |encryption|
|
155
|
+
encryption.password = 'my_secret_password'
|
156
|
+
end
|
157
|
+
|
158
|
+
compress_with Gzip do |compression|
|
159
|
+
compression.best = true
|
160
|
+
end
|
161
|
+
|
162
|
+
store_with S3 do |s3|
|
163
|
+
s3.access_key_id = 'my_access_key_id'
|
164
|
+
s3.secret_access_key = 'my_secret_access_key'
|
165
|
+
s3.region = 'us-east-1'
|
166
|
+
s3.bucket = 'my_bucket/backups'
|
167
|
+
s3.keep = 20
|
168
|
+
end
|
169
|
+
|
170
|
+
sync_with S3 do |s3|
|
171
|
+
s3.access_key_id = "my_access_key_id"
|
172
|
+
s3.secret_access_key = "my_secret_access_key"
|
173
|
+
s3.bucket = "my-bucket"
|
174
|
+
s3.path = "/backups"
|
175
|
+
s3.mirror = true
|
176
|
+
|
177
|
+
s3.directories do |directory|
|
178
|
+
directory.add "/var/apps/my_app/public/videos"
|
179
|
+
directory.add "/var/apps/my_app/public/music"
|
186
180
|
end
|
181
|
+
end
|
182
|
+
|
183
|
+
notify_by Mail do |mail|
|
184
|
+
mail.on_success = false
|
185
|
+
mail.on_failure = true
|
186
|
+
end
|
187
|
+
|
188
|
+
notify_by Twitter do |tweet|
|
189
|
+
tweet.on_success = true
|
190
|
+
tweet.on_failure = true
|
191
|
+
end
|
192
|
+
|
193
|
+
end
|
194
|
+
```
|
187
195
|
|
188
196
|
### Brief explanation for the above example configuration
|
189
197
|
|
190
198
|
It will dump two databases (MySQL and MongoDB), it'll create two (.t)archives (user_avatars and logs). It'll package the two database and two archives together in a single (.t)archive. It'll run the Gzip compressor to compress that archive, and then it'll run the OpenSSL encryptor to encrypt the compressed archive. Then that encrypted archive will be stored to your Amazon S3 account. If all goes well, and no exceptions are raised, you'll be notified via the Twitter notifier that the backup succeeded. If there was an exception raised during the backup process, then you'd receive an email in your inbox containing detailed exception information, as well as receive a simple Twitter message that something went wrong.
|
191
199
|
|
192
|
-
As you can see, you can freely mix and match **archives**, **databases**, **compressors**, **encryptors**, **storages** and **notifiers** for your backups. You could even specify
|
200
|
+
As you can see, you can freely mix and match **archives**, **databases**, **compressors**, **encryptors**, **storages** and **notifiers** for your backups. You could even specify 4 storage locations if you wanted: Amazon S3, Rackspace Cloud Files, Ninefold and Dropbox, it'd then store your packaged backup to 4 separate locations for high redundancy. This also applies to compressors (like Gzip, Bzip2, Lzma) and encryptors, you could double encrypt your backup with OpenSSL followed by GPG if you wanted.
|
193
201
|
|
194
|
-
Additionally we have also defined a **S3 Syncer** ( `sync_with S3` ), which does not follow the above process of archiving/compression/encryption, but instead will directly sync the whole `videos` and `music` folder structures from your machine to your Amazon S3 account. (very efficient and cost-effective since it will only transfer files that were changed
|
202
|
+
Additionally we have also defined a **S3 Syncer** ( `sync_with S3` ), which does not follow the above process of archiving/compression/encryption, but instead will directly sync the whole `videos` and `music` folder structures from your machine to your Amazon S3 account. (very efficient and cost-effective since it will only transfer files that were added/changed. Additionally, since we flagged it to 'mirror', it'll also remove files from S3 that no longer exist). If you simply wanted to sync to a separate backup server that you own, you could also use the RSync syncer for even more efficient backups that only transfer the **bytes** of each file that changed.
|
195
203
|
|
196
|
-
There are more **archives**, **databases**, **compressors**, **encryptors**, **storages** and **notifiers** than displayed in the example, all available components are listed at the top of this README, as well as in the [Wiki](https://github.com/meskyanichi/backup/wiki).
|
204
|
+
There are more **archives**, **databases**, **compressors**, **encryptors**, **storages** and **notifiers** than displayed in the example, all available components are listed at the top of this README, as well as in the [Wiki](https://github.com/meskyanichi/backup/wiki) with more detailed information.
|
197
205
|
|
198
206
|
### Running the example
|
199
207
|
|
200
208
|
Notice the `Backup::Model.new(:sample_backup, 'A sample backup configuration') do` at the top of the above example. The `:sample_backup` is called the **trigger**. This is used to identify the backup procedure/file and initialize it.
|
201
209
|
|
202
|
-
|
210
|
+
``` sh
|
211
|
+
backup perform -t [--trigger] sample_backup
|
212
|
+
```
|
203
213
|
|
204
214
|
Now it'll run the backup, it's as simple as that.
|
205
215
|
|
@@ -207,9 +217,11 @@ Now it'll run the backup, it's as simple as that.
|
|
207
217
|
|
208
218
|
Since Backup is a simple command line utility, you should write a crontask to invoke it periodically. I recommend you use [Whenever](https://github.com/javan/whenever) to manage your crontab. It'll allow you to write to the crontab in pure Ruby, it provides an elegant DSL to do so, for example:
|
209
219
|
|
210
|
-
|
211
|
-
|
212
|
-
|
220
|
+
``` rb
|
221
|
+
every 6.hours do
|
222
|
+
command "backup perform --trigger sample_backup"
|
223
|
+
end
|
224
|
+
```
|
213
225
|
|
214
226
|
With this in place, run `whenever --update-crontab backup` to write this Ruby syntax to the crontab in cron-syntax. The operating system will now invoke `backup perform --trigger sample_backup` every 6 hours. Check out the Whenever project page for more information.
|
215
227
|
|
@@ -280,6 +292,46 @@ Contributors
|
|
280
292
|
<td><a href="https://github.com/bgarret" target="_blank">Benoit Garret ( bgarret )</a></td>
|
281
293
|
<td>Presently notifier</td>
|
282
294
|
</tr>
|
295
|
+
<tr>
|
296
|
+
<td><a href="https://github.com/lleirborras" target="_blank">Lleïr Borràs Metje ( lleirborras )</a></td>
|
297
|
+
<td>Lzma Compressor</td>
|
298
|
+
</tr>
|
299
|
+
<tr>
|
300
|
+
<td><a href="https://github.com/jof" target="_blank">Jonathan Lassoff ( jof )</a></td>
|
301
|
+
<td>Bugfixes and more secure GPG storage</td>
|
302
|
+
</tr>
|
303
|
+
<tr>
|
304
|
+
<td><a href="https://github.com/mikz" target="_blank">Michal Cichra ( mikz )</a></td>
|
305
|
+
<td>Wildcard Triggers</td>
|
306
|
+
</tr>
|
307
|
+
<tr>
|
308
|
+
<td><a href="https://github.com/trybeee" target="_blank">Dmitry Novotochinov ( trybeee )</a></td>
|
309
|
+
<td>Dropbox Storage</td>
|
310
|
+
</tr>
|
311
|
+
<tr>
|
312
|
+
<td><a href="https://github.com/Emerson" target="_blank">Emerson Lackey ( Emerson )</a></td>
|
313
|
+
<td>Local RSync Storage</td>
|
314
|
+
</tr>
|
315
|
+
<tr>
|
316
|
+
<td><a href="https://github.com/digilord" target="_blank">digilord</a></td>
|
317
|
+
<td>OpenSSL Verify Mode for Mail Notifier</td>
|
318
|
+
</tr>
|
319
|
+
<tr>
|
320
|
+
<td><a href="https://github.com/stemps" target="_blank">stemps</a></td>
|
321
|
+
<td>FTP Passive Mode</td>
|
322
|
+
</tr>
|
323
|
+
<tr>
|
324
|
+
<td><a href="https://github.com/dkowis" target="_blank">David Kowis ( dkowis )</a></td>
|
325
|
+
<td>Fixed PostgreSQL Password issues</td>
|
326
|
+
</tr>
|
327
|
+
<tr>
|
328
|
+
<td><a href="https://github.com/jotto" target="_blank">Jonathan Otto ( jotto )</a></td>
|
329
|
+
<td>Allow for running PostgreSQL as another UNIX user</td>
|
330
|
+
</tr>
|
331
|
+
<tr>
|
332
|
+
<td><a href="https://github.com/joaovitor" target="_blank">João Vitor ( joaovitor )</a></td>
|
333
|
+
<td>Changed default PostgreSQL example options to appropriate ones</td>
|
334
|
+
</tr>
|
283
335
|
</table>
|
284
336
|
|
285
337
|
|
@@ -288,6 +340,7 @@ Want to contribute?
|
|
288
340
|
|
289
341
|
- Fork/Clone the **develop** branch
|
290
342
|
- Write RSpec tests, and test against:
|
343
|
+
- Ruby 1.9.3-preview1
|
291
344
|
- Ruby 1.9.2
|
292
345
|
- Ruby 1.8.7
|
293
346
|
- Ruby Enterprise Edition 1.8.7
|
@@ -295,25 +348,27 @@ Want to contribute?
|
|
295
348
|
|
296
349
|
I can't guarantee I'll pull every pull request. Also, I may accept your pull request and drastically change parts to improve readability/maintainability. Feel free to discuss about improvements, new functionality/features in the [issue log](https://github.com/meskyanichi/backup/issues) before contributing if you need/want more information.
|
297
350
|
|
298
|
-
Easily run tests against all
|
299
|
-
|
351
|
+
Easily run tests against all four Ruby versions
|
352
|
+
-----------------------------------------------
|
300
353
|
|
301
|
-
Install [RVM](https://rvm.beginrescueend.com/) and use it to install Ruby 1.9.2, 1.8.7 and REE.
|
354
|
+
Install [RVM](https://rvm.beginrescueend.com/) and use it to install Ruby 1.9.3, 1.9.2, 1.8.7 and REE.
|
302
355
|
|
303
|
-
rvm
|
356
|
+
rvm get latest && rvm reload
|
357
|
+
rvm install 1.9.3 && rvm install 1.9.2 && rvm install 1.8.7 && rvm install ree
|
304
358
|
|
305
359
|
Once these are installed, go ahead and install all the necessary dependencies.
|
306
360
|
|
307
361
|
cd backup
|
362
|
+
rvm use 1.9.3 && gem install bundler && bundle install
|
308
363
|
rvm use 1.9.2 && gem install bundler && bundle install
|
309
364
|
rvm use 1.8.7 && gem install bundler && bundle install
|
310
365
|
rvm use ree && gem install bundler && bundle install
|
311
366
|
|
312
|
-
The Backup gem uses [Guard](https://github.com/guard/guard) along with [Guard::RSpec](https://github.com/guard/guard-rspec) to quickly and easily test Backup's code against all
|
367
|
+
The Backup gem uses [Guard](https://github.com/guard/guard) along with [Guard::RSpec](https://github.com/guard/guard-rspec) to quickly and easily test Backup's code against all four Rubies. If you've done the above, all you have to do is run:
|
313
368
|
|
314
|
-
guard
|
369
|
+
bundle exec guard
|
315
370
|
|
316
|
-
from Backup's root and that's it. It'll now test against all
|
371
|
+
from Backup's root and that's it. It'll now test against all four Rubies each time you adjust a file in the `lib` or `spec` directories.
|
317
372
|
|
318
373
|
|
319
374
|
Or contribute by writing blogs/tutorials
|