backup 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gitignore +5 -0
- data/LICENSE +20 -0
- data/README.rdoc +237 -0
- data/Rakefile +59 -0
- data/VERSION +1 -0
- data/backup.gemspec +64 -0
- data/generators/backup_rake_tasks/backup_rake_tasks_generator.rb +56 -0
- data/generators/backup_rake_tasks/templates/README.rdoc +25 -0
- data/generators/backup_rake_tasks/templates/s3.rake +119 -0
- data/generators/backup_rake_tasks/templates/ssh.rake +114 -0
- data/lib/backup.rb +14 -0
- data/lib/backup/assets.rb +31 -0
- data/lib/backup/base.rb +46 -0
- data/lib/backup/connection/base.rb +13 -0
- data/lib/backup/connection/s3.rb +30 -0
- data/lib/backup/connection/ssh.rb +16 -0
- data/lib/backup/custom.rb +55 -0
- data/lib/backup/mysql.rb +38 -0
- data/lib/backup/sqlite3.rb +27 -0
- data/lib/backup/transfer/base.rb +13 -0
- data/lib/backup/transfer/s3.rb +30 -0
- data/lib/backup/transfer/ssh.rb +24 -0
- metadata +90 -0
data/.document
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 meskyanichi
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,237 @@
|
|
1
|
+
= Backup
|
2
|
+
|
3
|
+
Backup is a gem/plugin that enables you to very easily create backups and transfer these to Amazon S3 or another server using SSH.
|
4
|
+
It currently supports MySQL, SQLite3 and basic Assets (documents, images, etc) inside a folder. The files will get tar'd / gzip'd and get a timestamp-prefix.
|
5
|
+
After the backup file has been created, it can be transferred to either Amazon S3 or any remote server through SSH.
|
6
|
+
|
7
|
+
== Installation
|
8
|
+
|
9
|
+
=== Add Repository Source(s)
|
10
|
+
|
11
|
+
gem sources -a http://gemcutter.org
|
12
|
+
gem sources -a http://gems.github.com
|
13
|
+
|
14
|
+
=== Gem
|
15
|
+
|
16
|
+
# Gem Cutter
|
17
|
+
sudo gem install backup
|
18
|
+
|
19
|
+
# GitHub
|
20
|
+
sudo gem install meskyanichi-backup
|
21
|
+
|
22
|
+
=== Plugin
|
23
|
+
|
24
|
+
./script/plugin install git://github.com/meskyanichi/backup.git
|
25
|
+
|
26
|
+
|
27
|
+
=== Dependencies
|
28
|
+
|
29
|
+
# This will automatically install when installing the Backup gem.
|
30
|
+
# If you are using the Plugin, instead of the gem, be sure to install the aws-s3 gem.
|
31
|
+
sudo gem install aws-s3
|
32
|
+
|
33
|
+
|
34
|
+
== Getting started
|
35
|
+
|
36
|
+
Well, this is ridiculously easy to set up! So let's do this.
|
37
|
+
First install either the gem or plugin.
|
38
|
+
|
39
|
+
If you are using the gem version you "must" add the following line to your environment.rb file
|
40
|
+
|
41
|
+
==== config/environment.rb
|
42
|
+
|
43
|
+
# For GemCutter Version
|
44
|
+
config.gem "backup", :lib => "backup", :version => "0.1.0", :source => "http://gemcutter.org"
|
45
|
+
|
46
|
+
# For GitHub Version
|
47
|
+
config.gem "meskyanichi-backup", :lib => "backup", :version => "0.1.0", :source => "http://gems.github.com"
|
48
|
+
|
49
|
+
Once that's done, run the following command from the "root" of your Rails App
|
50
|
+
|
51
|
+
./script/generate backup_rake_tasks
|
52
|
+
|
53
|
+
|
54
|
+
This will generate two rake tasks and a README inside your "#{RAILS_ROOT}/lib/tasks/backup" folder.
|
55
|
+
- README.rdoc
|
56
|
+
- s3.rake
|
57
|
+
- ssh.rake
|
58
|
+
|
59
|
+
Open and read the README.rdoc if you want. It will explain everything very quickly, though, I doubt there is much to explain!
|
60
|
+
Then (or otherwise) open the "s3.rake" and "ssh.rake" rake task files. These include all the rake tasks/combinations that are (currently!) available.
|
61
|
+
Above each task inside these files is a description, explaining what you must do, again, "very" straight forward. Stupidly Easy to set up, thankfully!
|
62
|
+
|
63
|
+
After you've set up the tasks you wish to utilize (obviously you don't need to use all of them, you can simply just choose to use one of them),
|
64
|
+
they are all generated so you can basically just fill in the configuration values and be done with it. You obviously don't have to fill in the configuration
|
65
|
+
for any rake tasks you are not going to use.
|
66
|
+
|
67
|
+
That's it! So you have now done two things:
|
68
|
+
- Configured the Rake Files (just filled in the empty values)
|
69
|
+
- And at the same time, these are the executable rake tasks you will be using to create a backup
|
70
|
+
|
71
|
+
Just run one of the configured rake tasks to perform a backup!
|
72
|
+
|
73
|
+
== Example
|
74
|
+
|
75
|
+
So let me give an example of what one of these rake tasks will look like:
|
76
|
+
|
77
|
+
==== Rake Task for Backing up a Sqlite3 file to S3
|
78
|
+
|
79
|
+
task :sqlite3 => :environment do
|
80
|
+
Backup::Sqlite3.new({
|
81
|
+
:file => 'production.sqlite3',
|
82
|
+
|
83
|
+
:use => :s3,
|
84
|
+
:s3 => {
|
85
|
+
:access_key_id => 'your-s3-id',
|
86
|
+
:secret_access_key => 'your-s3-password',
|
87
|
+
:bucket => 'your-bucket-to-backup-to'
|
88
|
+
}
|
89
|
+
}).run
|
90
|
+
end
|
91
|
+
|
92
|
+
So this is one of the rake that's that the generator provides. Simple, isn't it?
|
93
|
+
Just fill in the values and run:
|
94
|
+
|
95
|
+
rake backup:s3:sqlite3
|
96
|
+
|
97
|
+
==== Rake Task for Backing up a Sqlite3 file to another server through SSH
|
98
|
+
|
99
|
+
task :sqlite3 => :environment do
|
100
|
+
Backup::Sqlite3.new({
|
101
|
+
:file => 'production.sqlite3',
|
102
|
+
|
103
|
+
:use => :ssh,
|
104
|
+
:ssh => {
|
105
|
+
:user => "root",
|
106
|
+
:ip => "123.45.678.90", # OR my-domain.com
|
107
|
+
:path => "/var/backups/etc"
|
108
|
+
}
|
109
|
+
}).run
|
110
|
+
end
|
111
|
+
|
112
|
+
Again, quick and easy. Now just execute this Backing/SSH transfer by running:
|
113
|
+
|
114
|
+
rake backing:ssh:sqlite3
|
115
|
+
|
116
|
+
|
117
|
+
See below what the requirements are when using S3 or SSH.
|
118
|
+
|
119
|
+
== Requirements
|
120
|
+
|
121
|
+
=== Using Amazon S3
|
122
|
+
|
123
|
+
This obviously requires you to have access to an Amazon S3 account.
|
124
|
+
These accounts are free and you only get charged for what you actually "use".
|
125
|
+
So no transfers = no cost. And aside of that, S3 is EXTREMELY cheap!
|
126
|
+
|
127
|
+
You can get an account here: http://aws.amazon.com/s3
|
128
|
+
|
129
|
+
Once you have an account you must install the AWS S3 gem, like so:
|
130
|
+
|
131
|
+
sudo gem install aws-s3
|
132
|
+
|
133
|
+
Backup makes use of the "aws-s3" gem to connect to Amazon S3. This is a dependency and will be installed when installing the Backup gem.
|
134
|
+
If you are using the plugin, you will need to manually install it.
|
135
|
+
|
136
|
+
=== Using SSH
|
137
|
+
|
138
|
+
If you're using SSH then there is one thing you must do. You must provide the machine that's going to "receive" your backups
|
139
|
+
your machine's (the senders) ssh-key. This is basically what you did with GitHub so you could push data to your GitHub repository
|
140
|
+
without getting prompted for a password.
|
141
|
+
|
142
|
+
=== Setting Up A Key For SSH
|
143
|
+
|
144
|
+
Setting up SSH Keychains is quite simple.
|
145
|
+
|
146
|
+
SSH to the "production" server and run the following command:
|
147
|
+
ssh-keygen -t rsa
|
148
|
+
|
149
|
+
It will prompt you 3 times, first it will ask what you wish to call the filename.
|
150
|
+
|
151
|
+
Just hit enter every time, do "not" fill in a password.
|
152
|
+
|
153
|
+
This will generate two files in the ~/.ssh/ directory, namely:
|
154
|
+
- id_rsa
|
155
|
+
- id_rsa.pub
|
156
|
+
|
157
|
+
So, now that the files are generated, holding the authorization keys, you can use these on any server you wish to login to without using a password.
|
158
|
+
The procedure accomplishing this is easy.
|
159
|
+
|
160
|
+
First, we will ensure there is a .ssh directory on the "backup" server by running the following command:
|
161
|
+
ssh root@your_ip mkdir -p .ssh
|
162
|
+
|
163
|
+
Once that's in place, we will append our newly (or already existing) key to the backup servers' .ssh/authorized_keys file.
|
164
|
+
cat ~/.ssh/id_rsa.pub | ssh root@server.com 'cat >> .ssh/authorized_keys'
|
165
|
+
|
166
|
+
Done. Now the key, generated on your "production" server, has been inserted inside the ".ssh/authorized_keys" file on the Backup server.
|
167
|
+
You should now be set to run all SSH rake tasks that have been configured to work with that particular Backup server.
|
168
|
+
|
169
|
+
==== Note: If the "authorized_keys" file does not yet exist, it will be automatically be created.
|
170
|
+
|
171
|
+
|
172
|
+
== Periodical Backups (using the "rake tasks" and a "cron")
|
173
|
+
|
174
|
+
Assuming you will want to run these backups (rake tasks) periodically.
|
175
|
+
What I currently use to run them is the "javan-whenever" gem. This is a very simple, easy to use gem
|
176
|
+
that makes it EXTREMELY simple to manage cron, using Ruby syntax. To understand what I mean, see the example below!
|
177
|
+
|
178
|
+
|
179
|
+
=== Javan's Whenever Gem Example
|
180
|
+
|
181
|
+
With this gem you can basically get periodic backup execution as easy as this:
|
182
|
+
|
183
|
+
every 2.hours do
|
184
|
+
rake "backup:s3:sqlite3"
|
185
|
+
end
|
186
|
+
|
187
|
+
Obviously this will update the crontab to make SQLite3 backups and store them on Amazon S3 every 2 hours.
|
188
|
+
If you want to do multiple backups, like perhaps backup your MySQL database, along with your assets:
|
189
|
+
|
190
|
+
every 2.hours do
|
191
|
+
rake "backup:s3:mysql"
|
192
|
+
rake "backup:s3:assets"
|
193
|
+
end
|
194
|
+
|
195
|
+
So yes, I highly recommend using the javan-whenever gem for this. It's very easy to write and maintain the crontab this way.
|
196
|
+
For more information on this gem and on how to use it: http://github.com/javan/whenever
|
197
|
+
Also, Ryan Bates has created a screencast for this gem, see it here: http://railscasts.com/episodes/164-cron-in-ruby
|
198
|
+
It's awesome, go check it out!
|
199
|
+
|
200
|
+
|
201
|
+
== Resources
|
202
|
+
|
203
|
+
So let me sum up the resources
|
204
|
+
|
205
|
+
==== My Backup Gem
|
206
|
+
sudo gem install backup
|
207
|
+
or
|
208
|
+
sudo gem install meskyanichi-backup
|
209
|
+
|
210
|
+
==== AWS-S3 Gem
|
211
|
+
sudo gem install aws-s3
|
212
|
+
|
213
|
+
==== Whenever Gem
|
214
|
+
sudo gem install javan-whenever
|
215
|
+
http://railscasts.com/episodes/164-cron-in-ruby
|
216
|
+
|
217
|
+
==== Amazon S3 Account Creation
|
218
|
+
http://aws.amazon.com/s3
|
219
|
+
|
220
|
+
|
221
|
+
==== Notes:
|
222
|
+
|
223
|
+
If you are going to use Amazon S3 to store your backups, be sure to install "AWS-S3".
|
224
|
+
|
225
|
+
If you want a nice and super easy way of managing the crontab and do periodical backups, install "Whenever".
|
226
|
+
|
227
|
+
Watch the Whenever Gem Screencast by Ryan Bates: http://railscasts.com/episodes/164-cron-in-ruby
|
228
|
+
|
229
|
+
|
230
|
+
== Requests
|
231
|
+
|
232
|
+
If anyone wishes to see support for PostgreSQL or any other database format, please send me a message!
|
233
|
+
|
234
|
+
|
235
|
+
== Copyright
|
236
|
+
|
237
|
+
Copyright (c) 2009 Michael van Rooijen | Final Creation. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "backup"
|
8
|
+
gem.summary = %Q{Backup is a gem/plugin that enables you to very easily create backups and transfer these to Amazon S3 or another server with SSH.}
|
9
|
+
gem.description = %Q{Backup is a gem/plugin that enables you to very easily create backups and transfer these to Amazon S3 or another server with SSH.
|
10
|
+
It currently supports MySQL, SQLite3 and basic Assets (documents, images, etc). The files will get tar'd / gzip'd and get a timestamp.
|
11
|
+
After creation, these files can be transferred to either Amazon S3 or any remote server through SSH.}
|
12
|
+
gem.email = "meskyan@gmail.com"
|
13
|
+
gem.homepage = "http://github.com/meskyanichi/backup"
|
14
|
+
gem.authors = ["meskyanichi"]
|
15
|
+
gem.add_dependency "aws-s3"
|
16
|
+
# gem.files.include 'generators/**/*'
|
17
|
+
# gem.files.include 'lib/**/*'
|
18
|
+
end
|
19
|
+
rescue LoadError
|
20
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'rake/testtask'
|
24
|
+
Rake::TestTask.new(:test) do |test|
|
25
|
+
test.libs << 'lib' << 'test'
|
26
|
+
test.pattern = 'test/**/*_test.rb'
|
27
|
+
test.verbose = true
|
28
|
+
end
|
29
|
+
|
30
|
+
begin
|
31
|
+
require 'rcov/rcovtask'
|
32
|
+
Rcov::RcovTask.new do |test|
|
33
|
+
test.libs << 'test'
|
34
|
+
test.pattern = 'test/**/*_test.rb'
|
35
|
+
test.verbose = true
|
36
|
+
end
|
37
|
+
rescue LoadError
|
38
|
+
task :rcov do
|
39
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
task :test => :check_dependencies
|
44
|
+
|
45
|
+
task :default => :test
|
46
|
+
|
47
|
+
require 'rake/rdoctask'
|
48
|
+
Rake::RDocTask.new do |rdoc|
|
49
|
+
if File.exist?('VERSION')
|
50
|
+
version = File.read('VERSION')
|
51
|
+
else
|
52
|
+
version = ""
|
53
|
+
end
|
54
|
+
|
55
|
+
rdoc.rdoc_dir = 'rdoc'
|
56
|
+
rdoc.title = "backup #{version}"
|
57
|
+
rdoc.rdoc_files.include('README*')
|
58
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
59
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/backup.gemspec
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{backup}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["meskyanichi"]
|
12
|
+
s.date = %q{2009-10-03}
|
13
|
+
s.description = %q{Backup is a gem/plugin that enables you to very easily create backups and transfer these to Amazon S3 or another server with SSH.
|
14
|
+
It currently supports MySQL, SQLite3 and basic Assets (documents, images, etc). The files will get tar'd / gzip'd and get a timestamp.
|
15
|
+
After creation, these files can be transferred to either Amazon S3 or any remote server through SSH.}
|
16
|
+
s.email = %q{meskyan@gmail.com}
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE",
|
19
|
+
"README.rdoc"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
".document",
|
23
|
+
".gitignore",
|
24
|
+
"LICENSE",
|
25
|
+
"README.rdoc",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"backup.gemspec",
|
29
|
+
"generators/backup_rake_tasks/backup_rake_tasks_generator.rb",
|
30
|
+
"generators/backup_rake_tasks/templates/README.rdoc",
|
31
|
+
"generators/backup_rake_tasks/templates/s3.rake",
|
32
|
+
"generators/backup_rake_tasks/templates/ssh.rake",
|
33
|
+
"lib/backup.rb",
|
34
|
+
"lib/backup/assets.rb",
|
35
|
+
"lib/backup/base.rb",
|
36
|
+
"lib/backup/connection/base.rb",
|
37
|
+
"lib/backup/connection/s3.rb",
|
38
|
+
"lib/backup/connection/ssh.rb",
|
39
|
+
"lib/backup/custom.rb",
|
40
|
+
"lib/backup/mysql.rb",
|
41
|
+
"lib/backup/sqlite3.rb",
|
42
|
+
"lib/backup/transfer/base.rb",
|
43
|
+
"lib/backup/transfer/s3.rb",
|
44
|
+
"lib/backup/transfer/ssh.rb"
|
45
|
+
]
|
46
|
+
s.homepage = %q{http://github.com/meskyanichi/backup}
|
47
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
48
|
+
s.require_paths = ["lib"]
|
49
|
+
s.rubygems_version = %q{1.3.5}
|
50
|
+
s.summary = %q{Backup is a gem/plugin that enables you to very easily create backups and transfer these to Amazon S3 or another server with SSH.}
|
51
|
+
|
52
|
+
if s.respond_to? :specification_version then
|
53
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
54
|
+
s.specification_version = 3
|
55
|
+
|
56
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
57
|
+
s.add_runtime_dependency(%q<aws-s3>, [">= 0"])
|
58
|
+
else
|
59
|
+
s.add_dependency(%q<aws-s3>, [">= 0"])
|
60
|
+
end
|
61
|
+
else
|
62
|
+
s.add_dependency(%q<aws-s3>, [">= 0"])
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
class BackupRakeTasksGenerator < Rails::Generator::Base
|
2
|
+
|
3
|
+
# This method gets initialized when the generator gets run.
|
4
|
+
# It will receive an array of arguments inside @args
|
5
|
+
def initialize(runtime_args, runtime_options = {})
|
6
|
+
super
|
7
|
+
extract_args
|
8
|
+
set_defaults
|
9
|
+
confirm_input
|
10
|
+
end
|
11
|
+
|
12
|
+
# Processes the file generation/templating
|
13
|
+
# This will automatically be run after the initialize method
|
14
|
+
def manifest
|
15
|
+
record do |m|
|
16
|
+
m.directory "lib/tasks/"
|
17
|
+
m.directory "lib/tasks/backup"
|
18
|
+
m.file "README.rdoc", "lib/tasks/backup/README.rdoc"
|
19
|
+
m.file "s3.rake", "lib/tasks/backup/s3.rake"
|
20
|
+
m.file "ssh.rake", "lib/tasks/backup/ssh.rake"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Creates a new Hash Object containing the user input
|
25
|
+
# The user input will be available through @input and input
|
26
|
+
def extract_args
|
27
|
+
@input = Hash.new
|
28
|
+
@args.each do |arg|
|
29
|
+
if arg.include?(":") then
|
30
|
+
@input[:"#{arg.slice(0, arg.index(":"))}"] = arg.slice((arg.index(":") + 1)..-1)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Input Method that's available inside the generated templates
|
36
|
+
# because instance variable are not available, so we access them through methods
|
37
|
+
def input
|
38
|
+
@input
|
39
|
+
end
|
40
|
+
|
41
|
+
# Sets defaults for user input when left blank by the user
|
42
|
+
# for each parameter
|
43
|
+
def set_defaults
|
44
|
+
end
|
45
|
+
|
46
|
+
# Confirms whether the model and attachment arguments were passed in
|
47
|
+
# Raises an error if not
|
48
|
+
def confirm_input
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def input_error
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
* Backup's Generated Rake Tasks
|
2
|
+
http://github.com/meskyanichi/backup
|
3
|
+
|
4
|
+
Quite simple, the generator has now generated all (currently!) possible backup options in the form of rake tasks!
|
5
|
+
Just open the desired backup-method's file (S3 or SHH or BOTH!). The basic structure of every task is already setup correctly.
|
6
|
+
Above each task you will find a description about the settings of each task. Please be sure to read this first before asking questions.
|
7
|
+
|
8
|
+
All in all this is extremely straight forward, there is no need to setup anything else inside your Rails Application other than installing the plugin,
|
9
|
+
running (this) generator and changing the values inside the rake task files.
|
10
|
+
|
11
|
+
Here is a list of the current rake tasks that are available:
|
12
|
+
|
13
|
+
backup:s3:mysql
|
14
|
+
backup:s3:sqlite3
|
15
|
+
backup:s3:assets
|
16
|
+
backup:s3:custom
|
17
|
+
backup:ssh:mysql
|
18
|
+
backup:ssh:sqlite3
|
19
|
+
backup:ssh:assets
|
20
|
+
backup:ssh:custom
|
21
|
+
|
22
|
+
|
23
|
+
So now you have rake tasks for all your essential backups.
|
24
|
+
What I like to do is use a cronjob manager gem to manage my cronjobs to trigger these rake tasks.
|
25
|
+
javan-whenever is a good gem for doing this! Try it, or any other method you can think of to trigger these rake tasks periodically.
|
@@ -0,0 +1,119 @@
|
|
1
|
+
namespace :backup do
|
2
|
+
namespace :s3 do
|
3
|
+
|
4
|
+
# => rake backup:s3:mysql
|
5
|
+
# Fill in your mysql credentials to allow Backup to create a mysql dump, and which database to make a dump from.
|
6
|
+
# Specify that you want to use :s3
|
7
|
+
# Fill in your Amazon S3 Account's Credentials (access_key_id, secret_access_key)
|
8
|
+
# Specify which bucket you wish to store your files to.
|
9
|
+
# If you wish to put specific files in subfolders inside the bucket, you may do so by doing something like this:
|
10
|
+
# :bucket => "my_bucket/subfolder1/subfolder2" etc.
|
11
|
+
task :mysql => :environment do
|
12
|
+
Backup::Mysql.new({
|
13
|
+
:mysql => {
|
14
|
+
:user => "",
|
15
|
+
:password => "",
|
16
|
+
:database => ""
|
17
|
+
},
|
18
|
+
|
19
|
+
:use => :s3,
|
20
|
+
:s3 => {
|
21
|
+
:access_key_id => '',
|
22
|
+
:secret_access_key => '',
|
23
|
+
:bucket => 'mybucket/backups/etc'
|
24
|
+
}
|
25
|
+
}).run
|
26
|
+
end
|
27
|
+
|
28
|
+
# => rake backup:s3:sqlite3
|
29
|
+
# Specify which sqlite3 file you wish to back up. This will generally be "production.sqlite3". (and this is the default, so you can remove the :file attribute if it is)
|
30
|
+
# Specify that you want to use :s3
|
31
|
+
# Fill in your Amazon S3 Account's Credentials (access_key_id, secret_access_key)
|
32
|
+
# Specify which bucket you wish to store your files to.
|
33
|
+
# If you wish to put specific files in subfolders inside the bucket, you may do so by doing something like this:
|
34
|
+
# :bucket => "my_bucket/subfolder1/subfolder2" etc.
|
35
|
+
task :sqlite3 => :environment do
|
36
|
+
Backup::Sqlite3.new({
|
37
|
+
:file => 'production.sqlite3', # "production.sqlite3" is default, can remove the whole :file attribute or change it's value
|
38
|
+
|
39
|
+
:use => :s3,
|
40
|
+
:s3 => {
|
41
|
+
:access_key_id => '',
|
42
|
+
:secret_access_key => '',
|
43
|
+
:bucket => 'mybucket/backups/etc'
|
44
|
+
}
|
45
|
+
}).run
|
46
|
+
end
|
47
|
+
|
48
|
+
# => rake backup:s3:assets
|
49
|
+
# Specify which directory (:path) (and all it's underlaying files and folders) you wish to backup.
|
50
|
+
# Specify that you want to use :s3
|
51
|
+
# Fill in your Amazon S3 Account's Credentials (access_key_id, secret_access_key)
|
52
|
+
# Specify which bucket you wish to store your files to.
|
53
|
+
# If you wish to put specific files in subfolders inside the bucket, you may do so by doing something like this:
|
54
|
+
# :bucket => "my_bucket/subfolder1/subfolder2" etc.
|
55
|
+
task :assets => :environment do
|
56
|
+
Backup::Assets.new({
|
57
|
+
:path => "#{RAILS_ROOT}/public/assets",
|
58
|
+
|
59
|
+
:use => :s3,
|
60
|
+
:s3 => {
|
61
|
+
:access_key_id => '',
|
62
|
+
:secret_access_key => '',
|
63
|
+
:bucket => 'mybucket/backups/etc'
|
64
|
+
}
|
65
|
+
}).run
|
66
|
+
end
|
67
|
+
|
68
|
+
# => rake backup:s3:custom
|
69
|
+
# This is a more complex implementation of the Backup gem.
|
70
|
+
# Might you be using a database type that is currently not supported, then you can manually create an SQL dump
|
71
|
+
# using the :command attribute. This will take either a single string, or an array of strings, depending on how many
|
72
|
+
# commands you wish to execute.
|
73
|
+
#
|
74
|
+
# Single Command
|
75
|
+
# :command => "my command"
|
76
|
+
# Multiple Commands
|
77
|
+
# :command => ["my command 1", "my command 2", "my command 3"] etc.
|
78
|
+
#
|
79
|
+
# This means you have full control over where the sql dump should be placed. But, depending on your decision, you must
|
80
|
+
# set the correct path to the file(s) (sql dumps) that have been generated.
|
81
|
+
#
|
82
|
+
# Path To File(s) Directory
|
83
|
+
# :path => "#{RAILS_ROOT}/db"
|
84
|
+
#
|
85
|
+
# Finally, you must specify which file(s) should be backed up.
|
86
|
+
# The :file attribute can take either a single string, or an array of strings to add multiple files.
|
87
|
+
#
|
88
|
+
# Select a single file to backup from the :path directory you specified
|
89
|
+
# :file => "foobar1.sql"
|
90
|
+
# Select multiple files to backup from the :path directory you specified
|
91
|
+
# :file => ["foobar1.sql", "foobar2.sql"] etc
|
92
|
+
#
|
93
|
+
# When you specify you would like to backup multiple files, it will automatically archive these as a "tar" for you and then compress it.
|
94
|
+
#
|
95
|
+
# By default, after the backup has been pushed to S3, it will remove the original files (created from your :command attribute)
|
96
|
+
# If you wish to keep these files, then add the following line:
|
97
|
+
# :keep_original_files => true
|
98
|
+
# This is set to 'false' by default, as you most likely don't want to keep these files on your production server.
|
99
|
+
#
|
100
|
+
# Just use the ":use => :s3" as usual to tell it you would like to back up these files using S3.
|
101
|
+
# And then, like in the example below, provide the S3 credentials/details to be able to connect to the server you wish to back these files up to.
|
102
|
+
task :custom => :environment do
|
103
|
+
Backup::Custom.new({
|
104
|
+
:command => ["mysqldump --quick -u root --password='' foobar > #{RAILS_ROOT}/db/foobar1.sql",
|
105
|
+
"mysqldump --quick -u root --password='' foobar > #{RAILS_ROOT}/db/foobar2.sql"],
|
106
|
+
|
107
|
+
:path => "#{RAILS_ROOT}/db",
|
108
|
+
:file => ["foobar1.sql","foobar2.sql"],
|
109
|
+
|
110
|
+
:use => :s3,
|
111
|
+
:s3 => {
|
112
|
+
:access_key_id => '',
|
113
|
+
:secret_access_key => '',
|
114
|
+
:bucket => 'mybucket/backups/etc'
|
115
|
+
}
|
116
|
+
}).run
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
namespace :backup do
|
2
|
+
namespace :ssh do
|
3
|
+
|
4
|
+
# => rake backup:ssh:mysql
|
5
|
+
# Fill in your mysql credentials to allow Backup to create a mysql dump, and which database to make a dump from.
|
6
|
+
# Specify that you want to use :ssh
|
7
|
+
# Specify what user should connect through SSH, to what address (be it IP or an URL) and the absolute path on the backup-server
|
8
|
+
# to where Backup should store the backups.
|
9
|
+
task :mysql => :environment do
|
10
|
+
Backup::Mysql.new({
|
11
|
+
:mysql => {
|
12
|
+
:user => "",
|
13
|
+
:password => "",
|
14
|
+
:database => ""
|
15
|
+
},
|
16
|
+
|
17
|
+
:use => :ssh,
|
18
|
+
:ssh => {
|
19
|
+
:user => "root",
|
20
|
+
:ip => "mydomain.com", # or: 123.45.678.90
|
21
|
+
:path => "/var/backups/etc"
|
22
|
+
}
|
23
|
+
}).run
|
24
|
+
end
|
25
|
+
|
26
|
+
# => rake backup:ssh:sqlite3
|
27
|
+
# Specify which sqlite3 file you wish to back up. This will generally be "production.sqlite3". (and this is the default, so you can remove the :file attribute if it is)
|
28
|
+
# If your sqlite3 file is not located inside the #{RAILS_ROOT}/db folder, then add a :path => "#{RAILS_ROOT}/path/to/db/folder"
|
29
|
+
# Specify that you want to use :ssh
|
30
|
+
# Specify what user should connect through SSH, to what address (be it IP or an URL) and the absolute path on the backup-server
|
31
|
+
# to where Backup should store the backups.
|
32
|
+
task :sqlite3 => :environment do
|
33
|
+
Backup::Sqlite3.new({
|
34
|
+
:file => 'production.sqlite3', # "production.sqlite3" is default, can remove the whole :file attribute or change it's value
|
35
|
+
|
36
|
+
:use => :ssh,
|
37
|
+
:ssh => {
|
38
|
+
:user => "root",
|
39
|
+
:ip => "mydomain.com", # or: 123.45.678.90
|
40
|
+
:path => "/var/backups/etc"
|
41
|
+
}
|
42
|
+
}).run
|
43
|
+
end
|
44
|
+
|
45
|
+
# => rake backup:ssh:assets
|
46
|
+
# Specify which directory (:path) (and all it's underlaying files and folders) you wish to backup.
|
47
|
+
# Specify that you want to use :ssh
|
48
|
+
# Specify what user should connect through SSH, to what address (be it IP or an URL) and the absolute path on the backup-server
|
49
|
+
# to where Backup should store the backups.
|
50
|
+
task :assets => :environment do
|
51
|
+
Backup::Assets.new({
|
52
|
+
:path => "#{RAILS_ROOT}/public/assets",
|
53
|
+
|
54
|
+
:use => :ssh,
|
55
|
+
:ssh => {
|
56
|
+
:user => "root",
|
57
|
+
:ip => "mydomain.com", # or: 123.45.678.90
|
58
|
+
:path => "/var/backups/etc"
|
59
|
+
}
|
60
|
+
}).run
|
61
|
+
end
|
62
|
+
|
63
|
+
# => rake backup:ssh:custom
|
64
|
+
# This is a more complex implementation of the Backup gem.
|
65
|
+
# Might you be using a database type that is currently not supported, then you can manually create an SQL dump
|
66
|
+
# using the :command attribute. This will take either a single string, or an array of strings, depending on how many
|
67
|
+
# commands you wish to execute.
|
68
|
+
#
|
69
|
+
# Single Command
|
70
|
+
# :command => "my command"
|
71
|
+
# Multiple Commands
|
72
|
+
# :command => ["my command 1", "my command 2", "my command 3"] etc.
|
73
|
+
#
|
74
|
+
# This means you have full control over where the sql dump should be placed. But, depending on your decision, you must
|
75
|
+
# set the correct path to the file(s) (sql dumps) that have been generated.
|
76
|
+
#
|
77
|
+
# Path To File(s) Directory
|
78
|
+
# :path => "#{RAILS_ROOT}/db"
|
79
|
+
#
|
80
|
+
# Finally, you must specify which file(s) should be backed up.
|
81
|
+
# The :file attribute can take either a single string, or an array of strings to add multiple files.
|
82
|
+
#
|
83
|
+
# Select a single file to backup from the :path directory you specified
|
84
|
+
# :file => "foobar1.sql"
|
85
|
+
# Select multiple files to backup from the :path directory you specified
|
86
|
+
# :file => ["foobar1.sql", "foobar2.sql"] etc
|
87
|
+
#
|
88
|
+
# When you specify you would like to backup multiple files, it will automatically archive these as a "tar" for you and then compress it.
|
89
|
+
#
|
90
|
+
# By default, after the backup has been pushed to your backup server using SSH, it will remove the original files (created from your :command attribute)
|
91
|
+
# If you wish to keep these files, then add the following line:
|
92
|
+
# :keep_original_files => true
|
93
|
+
# This is set to 'false' by default, as you most likely don't want to keep these files on your production server.
|
94
|
+
#
|
95
|
+
# Just use the ":use => :ssh" as usual to tell it you would like to back up these files using SSH.
|
96
|
+
# And then, like in the example below, provide the SSH details to be able to connect to the server you wish to back these files up to.
|
97
|
+
task :custom => :environment do
|
98
|
+
Backup::Custom.new({
|
99
|
+
:command => ["mysqldump --quick -u root --password='' foobar > #{RAILS_ROOT}/db/foobar1.sql",
|
100
|
+
"mysqldump --quick -u root --password='' foobar > #{RAILS_ROOT}/db/foobar2.sql"],
|
101
|
+
|
102
|
+
:path => "#{RAILS_ROOT}/db",
|
103
|
+
:file => ["foobar1.sql", "foobar2.sql"],
|
104
|
+
|
105
|
+
:use => :ssh,
|
106
|
+
:ssh => {
|
107
|
+
:user => "root",
|
108
|
+
:ip => "mydomain.com", # or: 123.45.678.90
|
109
|
+
:path => "/var/backups/etc"
|
110
|
+
}
|
111
|
+
}).run
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
data/lib/backup.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'backup/base'
|
2
|
+
require 'backup/sqlite3'
|
3
|
+
require 'backup/mysql'
|
4
|
+
require 'backup/assets'
|
5
|
+
require 'backup/custom'
|
6
|
+
require 'backup/transfer/base'
|
7
|
+
require 'backup/transfer/s3'
|
8
|
+
require 'backup/transfer/ssh'
|
9
|
+
require 'backup/connection/base'
|
10
|
+
require 'backup/connection/s3'
|
11
|
+
require 'backup/connection/ssh'
|
12
|
+
|
13
|
+
module Backup
|
14
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Backup
|
2
|
+
class Assets < Backup::Base
|
3
|
+
|
4
|
+
def initialize(options = {})
|
5
|
+
super(default_options.merge(options))
|
6
|
+
setup_paths("assets/#{self.class.name.downcase.gsub('::','-')}", 'tar.gz')
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
archive
|
11
|
+
compress
|
12
|
+
transfer
|
13
|
+
remove_temp_files
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def archive
|
19
|
+
%x{ tar -cf #{File.join(options[:backup_path], options[:backup_file])} #{options[:path]} }
|
20
|
+
end
|
21
|
+
|
22
|
+
def compress
|
23
|
+
%x{ gzip --best #{File.join(options[:backup_path], options[:backup_file])} }
|
24
|
+
end
|
25
|
+
|
26
|
+
def default_options
|
27
|
+
{ :path => "#{RAILS_ROOT}/public/assets", :file => "assets" }
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
data/lib/backup/base.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
module Backup
|
2
|
+
class Base
|
3
|
+
|
4
|
+
attr_accessor :options, :backup_time
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
self.options = options
|
8
|
+
self.backup_time = Time.now.strftime("%Y%m%d%H%M%S")
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def setup_paths(path, type = nil)
|
14
|
+
%x{ mkdir -p #{RAILS_ROOT}/tmp/backups/#{path} }
|
15
|
+
options[:backup_path] = "#{RAILS_ROOT}/tmp/backups/#{path}"
|
16
|
+
|
17
|
+
if options[:file].is_a?(Array)
|
18
|
+
options[:backup_file] = "#{backup_time}-#{options[:file].first}.#{type}"
|
19
|
+
else
|
20
|
+
options[:backup_file] = "#{backup_time}-#{options[:file]}.#{type}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def transfer
|
25
|
+
case options[:use]
|
26
|
+
when :s3 then Backup::Transfer::S3.new(options)
|
27
|
+
when :ssh then Backup::Transfer::SSH.new(options)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def remove_temp_files
|
32
|
+
%x{ rm #{File.join(options[:backup_path], "*")} }
|
33
|
+
end
|
34
|
+
|
35
|
+
def remove_original_file
|
36
|
+
if options[:file].is_a?(Array)
|
37
|
+
options[:file].each do |file|
|
38
|
+
%x{ rm #{File.join(options[:path], file)} }
|
39
|
+
end
|
40
|
+
else
|
41
|
+
%x{ rm #{File.join(options[:path], options[:file])} }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Backup
|
2
|
+
module Connection
|
3
|
+
class S3 < Backup::Connection::Base
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
super(options)
|
7
|
+
end
|
8
|
+
|
9
|
+
def connect
|
10
|
+
AWS::S3::Base.establish_connection!(
|
11
|
+
:access_key_id => options[:s3][:access_key_id],
|
12
|
+
:secret_access_key => options[:s3][:secret_access_key]
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
def service
|
17
|
+
AWS::S3::Service
|
18
|
+
end
|
19
|
+
|
20
|
+
def bucket
|
21
|
+
AWS::S3::Bucket
|
22
|
+
end
|
23
|
+
|
24
|
+
def object
|
25
|
+
AWS::S3::S3Object
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Backup
|
2
|
+
module Connection
|
3
|
+
class SSH < Backup::Connection::Base
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
super(options)
|
7
|
+
end
|
8
|
+
|
9
|
+
def store
|
10
|
+
%x{ ssh #{options[:ssh][:user]}@#{options[:ssh][:ip]} mkdir -p #{options[:ssh][:path]} }
|
11
|
+
%x{ scp #{File.join(options[:backup_path], options[:backup_file])} #{options[:ssh][:user]}@#{options[:ssh][:ip]}:#{options[:ssh][:path]} }
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Backup
|
2
|
+
class Custom < Backup::Base
|
3
|
+
|
4
|
+
def initialize(options = {})
|
5
|
+
super(default_options.merge(options))
|
6
|
+
setup_paths("db/#{self.class.name.downcase.gsub('::','-')}", options[:file].is_a?(Array) ? 'tar.gz' : 'gz')
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
command
|
11
|
+
archive
|
12
|
+
compress
|
13
|
+
transfer
|
14
|
+
remove_temp_files
|
15
|
+
remove_original_file unless options[:keep_original_files].eql?(true)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def command
|
21
|
+
if options[:command].is_a?(Array)
|
22
|
+
options[:command].each do |command|
|
23
|
+
%x{ #{command} }
|
24
|
+
end
|
25
|
+
else
|
26
|
+
%x{ #{options[:command]} }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def archive
|
31
|
+
if options[:file].is_a?(Array)
|
32
|
+
files = options[:file].map {|file| File.join(options[:path], file)}
|
33
|
+
%x{ tar -cf #{File.join(options[:backup_path], options[:backup_file])} #{files.join(' ')} }
|
34
|
+
else
|
35
|
+
%x{ tar -cf #{File.join(options[:backup_path], options[:backup_file])} #{File.join(options[:path], options[:file])} }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def compress
|
40
|
+
if options[:file].is_a?(Array)
|
41
|
+
%x{ gzip --best #{File.join(options[:backup_path], options[:backup_file])} }
|
42
|
+
else
|
43
|
+
%x{ gzip -cv #{File.join(options[:path], options[:file])} --best > #{File.join(options[:backup_path], options[:backup_file])} }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def default_options
|
48
|
+
{ :path => "",
|
49
|
+
:file => "",
|
50
|
+
:command => "",
|
51
|
+
:keep_original_files => false }
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
data/lib/backup/mysql.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Backup
|
2
|
+
class Mysql < Backup::Base
|
3
|
+
|
4
|
+
def initialize(options = {})
|
5
|
+
super(default_options.merge(options))
|
6
|
+
setup_paths("db/#{self.class.name.downcase.gsub('::','-')}", :gz)
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
make_mysql_dump
|
11
|
+
compress
|
12
|
+
transfer
|
13
|
+
remove_temp_files
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def compress
|
19
|
+
%x{ gzip -cv #{File.join(options[:path], options[:file])} --best > #{File.join(options[:backup_path], options[:backup_file])} }
|
20
|
+
end
|
21
|
+
|
22
|
+
def make_mysql_dump
|
23
|
+
# => /usr/local/mysql/bin/mysqldump on Mac OS X 10.6
|
24
|
+
%x{ mysqldump --quick -u #{options[:mysql][:user]} --password='#{options[:mysql][:password]}' #{options[:mysql][:database]} > #{File.join(options[:path], options[:file])} }
|
25
|
+
end
|
26
|
+
|
27
|
+
def default_options
|
28
|
+
{:path => "#{RAILS_ROOT}/tmp/backups/db/#{self.class.name.downcase.gsub('::','-')}",
|
29
|
+
:file => "production.sql",
|
30
|
+
:mysql => {
|
31
|
+
:user => "",
|
32
|
+
:password => "",
|
33
|
+
:database => ""
|
34
|
+
}}
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Backup
|
2
|
+
class Sqlite3 < Backup::Base
|
3
|
+
|
4
|
+
def initialize(options = {})
|
5
|
+
super(default_options.merge(options))
|
6
|
+
setup_paths("db/#{self.class.name.downcase.gsub('::','-')}", :gz)
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
compress
|
11
|
+
transfer
|
12
|
+
remove_temp_files
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def compress
|
18
|
+
%x{ gzip -cv #{File.join(options[:path], options[:file])} --best > #{File.join(options[:backup_path], options[:backup_file])} }
|
19
|
+
end
|
20
|
+
|
21
|
+
def default_options
|
22
|
+
{ :path => "#{RAILS_ROOT}/db",
|
23
|
+
:file => "production.sqlite3" }
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'aws/s3'
|
2
|
+
|
3
|
+
module Backup
|
4
|
+
module Transfer
|
5
|
+
class S3 < Backup::Transfer::Base
|
6
|
+
|
7
|
+
def initialize(options)
|
8
|
+
super(default_options.merge(options))
|
9
|
+
|
10
|
+
s3 = Backup::Connection::S3.new(options)
|
11
|
+
s3.connect
|
12
|
+
s3.object.store(
|
13
|
+
options[:backup_file],
|
14
|
+
open(File.join(options[:backup_path], options[:backup_file])),
|
15
|
+
options[:s3][:bucket] )
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def default_options
|
21
|
+
{:s3 => {
|
22
|
+
:access_key_id => '',
|
23
|
+
:secret_access_key => '',
|
24
|
+
:bucket => ''
|
25
|
+
}}
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Backup
|
2
|
+
module Transfer
|
3
|
+
class SSH < Backup::Transfer::Base
|
4
|
+
|
5
|
+
def initialize(options)
|
6
|
+
super(default_options.merge(options))
|
7
|
+
|
8
|
+
ssh = Backup::Connection::SSH.new(options)
|
9
|
+
ssh.store
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def default_options
|
15
|
+
{:ssh => {
|
16
|
+
:user => "",
|
17
|
+
:ip => "",
|
18
|
+
:path => "/var/backups/"
|
19
|
+
}}
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: backup
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- meskyanichi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-10-03 00:00:00 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: aws-s3
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description: |-
|
26
|
+
Backup is a gem/plugin that enables you to very easily create backups and transfer these to Amazon S3 or another server with SSH.
|
27
|
+
It currently supports MySQL, SQLite3 and basic Assets (documents, images, etc). The files will get tar'd / gzip'd and get a timestamp.
|
28
|
+
After creation, these files can be transferred to either Amazon S3 or any remote server through SSH.
|
29
|
+
email: meskyan@gmail.com
|
30
|
+
executables: []
|
31
|
+
|
32
|
+
extensions: []
|
33
|
+
|
34
|
+
extra_rdoc_files:
|
35
|
+
- LICENSE
|
36
|
+
- README.rdoc
|
37
|
+
files:
|
38
|
+
- .document
|
39
|
+
- .gitignore
|
40
|
+
- LICENSE
|
41
|
+
- README.rdoc
|
42
|
+
- Rakefile
|
43
|
+
- VERSION
|
44
|
+
- backup.gemspec
|
45
|
+
- generators/backup_rake_tasks/backup_rake_tasks_generator.rb
|
46
|
+
- generators/backup_rake_tasks/templates/README.rdoc
|
47
|
+
- generators/backup_rake_tasks/templates/s3.rake
|
48
|
+
- generators/backup_rake_tasks/templates/ssh.rake
|
49
|
+
- lib/backup.rb
|
50
|
+
- lib/backup/assets.rb
|
51
|
+
- lib/backup/base.rb
|
52
|
+
- lib/backup/connection/base.rb
|
53
|
+
- lib/backup/connection/s3.rb
|
54
|
+
- lib/backup/connection/ssh.rb
|
55
|
+
- lib/backup/custom.rb
|
56
|
+
- lib/backup/mysql.rb
|
57
|
+
- lib/backup/sqlite3.rb
|
58
|
+
- lib/backup/transfer/base.rb
|
59
|
+
- lib/backup/transfer/s3.rb
|
60
|
+
- lib/backup/transfer/ssh.rb
|
61
|
+
has_rdoc: true
|
62
|
+
homepage: http://github.com/meskyanichi/backup
|
63
|
+
licenses: []
|
64
|
+
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options:
|
67
|
+
- --charset=UTF-8
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: "0"
|
75
|
+
version:
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: "0"
|
81
|
+
version:
|
82
|
+
requirements: []
|
83
|
+
|
84
|
+
rubyforge_project:
|
85
|
+
rubygems_version: 1.3.5
|
86
|
+
signing_key:
|
87
|
+
specification_version: 3
|
88
|
+
summary: Backup is a gem/plugin that enables you to very easily create backups and transfer these to Amazon S3 or another server with SSH.
|
89
|
+
test_files: []
|
90
|
+
|