dev_dump 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +1 -0
- data/dev_dump.gemspec +23 -0
- data/lib/dev_dump.rb +24 -0
- data/lib/dev_dump/railtie.rb +14 -0
- data/lib/dev_dump/version.rb +3 -0
- data/lib/tasks/dev_dump.rake +66 -0
- metadata +83 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 02ea6b4294dfb088d43e62cbadb9ed2dae750475
|
4
|
+
data.tar.gz: 2e2aa9243d5e80cde9e6e7fb0a3d618dd5285ebd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b7665a956a0fdf748611023c7904426c8409032af65872c9ee9a01c619e8299518c3317249b22fed2d777f48eb5927e8a6d1906397ac921874c8296aafc26d03
|
7
|
+
data.tar.gz: 0862212905543c781d19c2c68c38d8a3f7c22d421aedcfc6ee4dacd8a7d724f3fed10ce91f9b6bb22bdd59cd764bcdd6031ef4172aef4b856d8c09f108d35e23
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Andy Atkinson
|
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/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# DevDump
|
2
|
+
|
3
|
+
Provides Rake tasks to dump a database to an encrypted file on a remote server, download the file, and restore a local DB from the file.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'dev_dump'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
This depends on `gpg`. Install it on OS X with `brew install gpg`.
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
rake dev_dump:dump # run from the app root on production. dump postgres DB to a file. supply a passphrase for gpg encryption.
|
20
|
+
rake dev_dump:download_file[/path/to/file/on/prod] # run from developer machine, with a file path in mind
|
21
|
+
rake dev_dump:load[/path/to/local/file] # run after the dump file is downloaded
|
22
|
+
|
23
|
+
## Configuration
|
24
|
+
|
25
|
+
Configuration can be provided with a Rails initializer as a configuration file, following [this approach](http://robots.thoughtbot.com/mygem-configure-block).
|
26
|
+
|
27
|
+
DevDump.configure do |config|
|
28
|
+
config.backups_path = "/tmp/some_dir"
|
29
|
+
config.ssh_user = "user"
|
30
|
+
config.ssh_host = "host.server.com"
|
31
|
+
end
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/dev_dump.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'dev_dump/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "dev_dump"
|
8
|
+
spec.version = DevDump::VERSION
|
9
|
+
spec.authors = ["Andy Atkinson"]
|
10
|
+
spec.email = ["andyatkinson@gmail.com"]
|
11
|
+
spec.summary = %q{Rake tasks to work with a remote database.}
|
12
|
+
spec.description = %q{}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
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.5"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
data/lib/dev_dump.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "dev_dump/version"
|
2
|
+
require "dev_dump/railtie" if defined?(Rails)
|
3
|
+
|
4
|
+
module DevDump
|
5
|
+
class << self
|
6
|
+
attr_accessor :configuration
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.configure
|
10
|
+
self.configuration ||= Configuration.new
|
11
|
+
yield(configuration)
|
12
|
+
end
|
13
|
+
|
14
|
+
class Configuration
|
15
|
+
attr_accessor :rails_db_config, :backups_path, :ssh_user, :ssh_host
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
self.rails_db_config = YAML.load_file(File.join(Dir.getwd, 'config', 'database.yml'))[Rails.env]
|
19
|
+
self.backups_path = "/tmp/backups/"
|
20
|
+
self.ssh_user = nil
|
21
|
+
self.ssh_host = nil
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'dev_dump'
|
2
|
+
require 'rails'
|
3
|
+
require 'rails/railtie'
|
4
|
+
|
5
|
+
module DevDump
|
6
|
+
class Railtie < Rails::Railtie
|
7
|
+
rake_tasks do
|
8
|
+
# NOTE: seems like it should be able to be called from config.after_initialize block, but that didn't work
|
9
|
+
require Rails.root.join('config/initializers/dev_dump.rb')
|
10
|
+
|
11
|
+
load 'tasks/dev_dump.rake'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "erb"
|
3
|
+
require "dev_dump"
|
4
|
+
include DevDump
|
5
|
+
|
6
|
+
namespace :dev_dump do
|
7
|
+
desc "dump the database to a zipped file"
|
8
|
+
task :dump => :environment do
|
9
|
+
raise "gpg is required." unless `which gpg`
|
10
|
+
raise "Ruby on Rails is required." unless defined?(Rails)
|
11
|
+
raise "pg_dump is required." unless `which pg_dump`
|
12
|
+
|
13
|
+
if db_config = DevDump.configuration.rails_db_config
|
14
|
+
filename = "#{db_config['database']}.dump.#{Time.now.to_i}.sql"
|
15
|
+
Dir.mkdir(DevDump.configuration.backups_path) unless File.exists?(DevDump.configuration.backups_path)
|
16
|
+
file = "#{DevDump.configuration.backups_path}#{filename}"
|
17
|
+
db_user = ERB.new(db_config['username']).result
|
18
|
+
|
19
|
+
`pg_dump --clean --no-owner --no-privileges -U#{db_user} #{db_config['database']} | gzip > #{file}.gz`
|
20
|
+
if File.exists?("#{file}.gz")
|
21
|
+
`gpg -c #{file}.gz`
|
22
|
+
`rm #{file}.gz`
|
23
|
+
puts "wrote file: #{file}.gz.gpg"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "download dump file"
|
29
|
+
task :download_file, [:remote_path] do |t, args|
|
30
|
+
if args && args[:remote_path]
|
31
|
+
command = "scp #{DevDump.configuration.ssh_user}@#{DevDump.configuration.ssh_host}:#{args[:remote_path]} #{args[:remote_path]}"
|
32
|
+
puts "downloading file with command: #{command}"
|
33
|
+
`#{command}`
|
34
|
+
puts "done."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "load the database from a zipped file"
|
39
|
+
task :load, [:filepath] do |t, args|
|
40
|
+
raise "gpg is required." unless `which gpg`
|
41
|
+
raise "gunzip is required." unless `which gunzip`
|
42
|
+
raise "psql is required." unless `which psql`
|
43
|
+
|
44
|
+
file = if args.present? && File.exists?(args[:filepath])
|
45
|
+
args[:filepath]
|
46
|
+
else
|
47
|
+
`ls -tr #{DevDump.configuration.backups_path} | tail -n1`.chomp
|
48
|
+
end
|
49
|
+
if file.empty?
|
50
|
+
puts "no backups found"
|
51
|
+
else
|
52
|
+
puts "restoring from file: #{file}"
|
53
|
+
if db_config = DevDump.configuration.rails_db_config
|
54
|
+
db_user = ERB.new(db_config['username']).result
|
55
|
+
gzipped_file = file.gsub(/\.gpg/, '')
|
56
|
+
puts "gzipped file path: #{gzipped_file}"
|
57
|
+
|
58
|
+
`gpg #{file}`
|
59
|
+
if File.exists?(gzipped_file)
|
60
|
+
`gunzip -c #{gzipped_file} | psql -U #{db_user} -d #{db_config['database']}`
|
61
|
+
end
|
62
|
+
puts "...done."
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dev_dump
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andy Atkinson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: ''
|
42
|
+
email:
|
43
|
+
- andyatkinson@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- .gitignore
|
49
|
+
- Gemfile
|
50
|
+
- LICENSE.txt
|
51
|
+
- README.md
|
52
|
+
- Rakefile
|
53
|
+
- dev_dump.gemspec
|
54
|
+
- lib/dev_dump.rb
|
55
|
+
- lib/dev_dump/railtie.rb
|
56
|
+
- lib/dev_dump/version.rb
|
57
|
+
- lib/tasks/dev_dump.rake
|
58
|
+
homepage: ''
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
metadata: {}
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 2.0.14
|
79
|
+
signing_key:
|
80
|
+
specification_version: 4
|
81
|
+
summary: Rake tasks to work with a remote database.
|
82
|
+
test_files: []
|
83
|
+
has_rdoc:
|