koine-db_bkp 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +28 -16
- data/Rakefile +5 -2
- data/lib/koine/db_bkp/mysql/dump.rb +37 -2
- data/lib/koine/db_bkp/version.rb +1 -1
- data/lib/koine/db_bkp.rb +5 -0
- data/lib/koine/tasks/mysql_dump.rb +60 -0
- data/lib/koine/tasks/rails_mysql_dump.rb +25 -0
- metadata +3 -4
- data/lib/koine/db_bkp/mysql/rails_dump.rb +0 -62
- data/lib/koine/tasks/mysql_dump.rake +0 -26
- data/lib/koine/tasks/mysql_rails_dump.rake +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b2e5356b280e6bfb128566c9e83c4eb7d0780fe
|
4
|
+
data.tar.gz: 3c8cbb6454be752f108acf108a55508a2ffa0ab5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 742a358cbe09f1edc8913aa114195b1f619656804a6d8b3234ba2c00bf81165ef0121c66d014b57215d6695fd05c4f7d6b15e68926f17d8c3e91dd0808f48ac5
|
7
|
+
data.tar.gz: 3ffa6e5151ea5fde3ac40d6f34d34d43a6ffdbd46c4ded4d105f2fbdb556b5a4f48dadd3b437397f4dcd3793340d4a4fc05475ab618a250c9e5d6a9bdf7dc994
|
data/README.md
CHANGED
@@ -32,33 +32,45 @@ backup = Koine::DbBkp::Mysql::Dump.new(
|
|
32
32
|
backup.to_sql_file('/bkp/file.sql')
|
33
33
|
```
|
34
34
|
|
35
|
-
###
|
35
|
+
### Rake tasks
|
36
36
|
|
37
37
|
```ruby
|
38
|
-
|
38
|
+
# Rakefile
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
require "koine/db_bkp"
|
41
|
+
|
42
|
+
Koine::Tasks::MysqlDump.new do |t|
|
43
|
+
t.task_name = 'some_task' # defaults to 'mysql:dump'
|
44
|
+
t.output_file = 'backup_{timestamp}.sql' # defaults to ENV['MYSQL_BACKUP_FILE']
|
45
|
+
# {timestamp} is a placeholder for the autogenerated timestamp
|
46
|
+
|
47
|
+
# database config
|
48
|
+
t.url = 'mysql2://username:password@hostname/database_name' # defaults to ENV['DB_URL']
|
49
|
+
|
50
|
+
# or database config
|
51
|
+
t.hostname = 'hostname' # defaults to ENV['DB_HOST']
|
52
|
+
t.database = 'database_name' # defaults to ENV['DB_NAME']
|
53
|
+
t.username = 'username' # defaults to ENV['DB_USER']
|
54
|
+
t.password = 'password' # defaults to ENV['DB_PASSWORD']
|
55
|
+
|
56
|
+
# rake task dependencies
|
57
|
+
t.dependencies = [:environment] # defaults to []
|
58
|
+
end
|
43
59
|
```
|
44
60
|
|
45
|
-
|
61
|
+
#### Rails task
|
46
62
|
|
47
63
|
```ruby
|
64
|
+
# Rakefile
|
65
|
+
|
48
66
|
require "koine/db_bkp"
|
49
67
|
|
50
|
-
|
51
|
-
|
68
|
+
# same options of Koine::Tasks::RailsMysqlDump apply
|
69
|
+
Koine::Tasks::RailsMysqlDump.new
|
52
70
|
```
|
53
71
|
|
54
72
|
```bash
|
55
|
-
|
56
|
-
export DB_NAME=some_name
|
57
|
-
export DB_USER=some_user
|
58
|
-
export DB_PASSWORD=some_password
|
59
|
-
export MYSQL_BACKUP_FILE='/foo/bar_{timestamp}.sql'
|
60
|
-
|
61
|
-
rake koine:mysql:dump
|
73
|
+
rake rake mysql:dump
|
62
74
|
```
|
63
75
|
|
64
76
|
```bash
|
@@ -66,7 +78,7 @@ rake koine:mysql:dump
|
|
66
78
|
|
67
79
|
export MYSQL_BACKUP_FILE='/foo/bar_{timestamp}.sql'
|
68
80
|
|
69
|
-
rake
|
81
|
+
rake mysql:rails_dump
|
70
82
|
```
|
71
83
|
|
72
84
|
## Development
|
data/Rakefile
CHANGED
@@ -3,8 +3,11 @@ require "rspec/core/rake_task"
|
|
3
3
|
|
4
4
|
require "koine/db_bkp"
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
Koine::Tasks::MysqlDump.new
|
7
|
+
|
8
|
+
Koine::Tasks::RailsMysqlDump.new do |t|
|
9
|
+
t.task_name = 'rails:mysql_dump'
|
10
|
+
end
|
8
11
|
|
9
12
|
RSpec::Core::RakeTask.new(:spec)
|
10
13
|
|
@@ -1,12 +1,15 @@
|
|
1
|
+
require 'addressable/uri'
|
2
|
+
|
1
3
|
module Koine
|
2
4
|
module DbBkp
|
3
5
|
module Mysql
|
4
6
|
class Dump
|
5
7
|
def initialize(config = {})
|
6
|
-
config = config
|
8
|
+
config = normalize_config(config)
|
7
9
|
|
8
|
-
@hostname = config
|
10
|
+
@hostname = config.fetch(:hostname)
|
9
11
|
@database = config.fetch(:database)
|
12
|
+
@username = config[:username]
|
10
13
|
@password = config[:password]
|
11
14
|
@cli = Cli.new
|
12
15
|
end
|
@@ -15,13 +18,45 @@ module Koine
|
|
15
18
|
parts = ['mysqldump']
|
16
19
|
|
17
20
|
parts.push("-h #{@hostname}") if @hostname
|
21
|
+
parts.push("-u #{@username}") if @username
|
18
22
|
parts.push("-p#{@password}") if @password
|
19
23
|
|
20
24
|
parts.push(@database)
|
25
|
+
|
26
|
+
file = FileName.new(file)
|
21
27
|
parts.push("> #{file}")
|
22
28
|
|
23
29
|
@cli.execute(parts.join(' '))
|
24
30
|
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def normalize_config(config)
|
35
|
+
config = config.reject { |_k, v| ['', nil].include?(v) }
|
36
|
+
merge_url(symbolize_keys(config))
|
37
|
+
end
|
38
|
+
|
39
|
+
def merge_url(config)
|
40
|
+
url = config.delete(:url)
|
41
|
+
|
42
|
+
return config unless url
|
43
|
+
|
44
|
+
url = Addressable::URI.parse(url)
|
45
|
+
|
46
|
+
config.merge(
|
47
|
+
adapter: url.scheme,
|
48
|
+
hostname: url.host,
|
49
|
+
database: url.path.split('/').join(''),
|
50
|
+
username: url.user,
|
51
|
+
password: url.password
|
52
|
+
)
|
53
|
+
end
|
54
|
+
|
55
|
+
def symbolize_keys(hash)
|
56
|
+
{}.tap do |new_hash|
|
57
|
+
hash.each { |key, value| new_hash[key.to_sym] = value }
|
58
|
+
end
|
59
|
+
end
|
25
60
|
end
|
26
61
|
end
|
27
62
|
end
|
data/lib/koine/db_bkp/version.rb
CHANGED
data/lib/koine/db_bkp.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
require 'koine/db_bkp/version'
|
2
2
|
|
3
3
|
module Koine
|
4
|
+
module Tasks
|
5
|
+
autoload :MysqlDump, 'koine/tasks/mysql_dump'
|
6
|
+
autoload :RailsMysqlDump, 'koine/tasks/rails_mysql_dump'
|
7
|
+
end
|
8
|
+
|
4
9
|
module DbBkp
|
5
10
|
autoload :Cli, 'koine/db_bkp/cli'
|
6
11
|
autoload :FileName, 'koine/db_bkp/file_name'
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/tasklib'
|
3
|
+
|
4
|
+
module Koine
|
5
|
+
module Tasks
|
6
|
+
class MysqlDump < Rake::TaskLib
|
7
|
+
OutputFileNotSetError = Class.new(StandardError)
|
8
|
+
|
9
|
+
attr_accessor :task_name
|
10
|
+
attr_accessor :dependencies
|
11
|
+
attr_accessor :hostname
|
12
|
+
attr_accessor :database
|
13
|
+
attr_accessor :username
|
14
|
+
attr_accessor :password
|
15
|
+
attr_accessor :url
|
16
|
+
attr_writer :output_file
|
17
|
+
|
18
|
+
def initialize(env: ENV)
|
19
|
+
self.task_name ||= 'mysql:dump'
|
20
|
+
self.dependencies ||= []
|
21
|
+
self.url ||= env['DB_URL']
|
22
|
+
self.hostname ||= env['DB_HOST']
|
23
|
+
self.database ||= env['DB_NAME']
|
24
|
+
self.username ||= env['DB_USER']
|
25
|
+
self.password ||= env['DB_PASSWORD']
|
26
|
+
self.output_file = env['MYSQL_BACKUP_FILE']
|
27
|
+
yield(self) if block_given?
|
28
|
+
define_task
|
29
|
+
end
|
30
|
+
|
31
|
+
def output_file
|
32
|
+
@output_file || raise(OutputFileNotSetError)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def define_task
|
38
|
+
desc 'Mysqldump to backup file'
|
39
|
+
task task_name => dependencies do
|
40
|
+
execute_task
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def execute_task
|
45
|
+
backup = Koine::DbBkp::Mysql::Dump.new(configuration)
|
46
|
+
backup.to_sql_file(output_file)
|
47
|
+
end
|
48
|
+
|
49
|
+
def configuration
|
50
|
+
{
|
51
|
+
url: url,
|
52
|
+
hostname: hostname,
|
53
|
+
database: database,
|
54
|
+
username: username,
|
55
|
+
password: password
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/tasklib'
|
3
|
+
|
4
|
+
module Koine
|
5
|
+
module Tasks
|
6
|
+
class RailsMysqlDump < MysqlDump
|
7
|
+
def initialize(*args)
|
8
|
+
self.dependencies ||= [:environment]
|
9
|
+
super(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def configuration
|
15
|
+
config = super.reject { |k, v| v.nil? }
|
16
|
+
rails_config.merge(config)
|
17
|
+
end
|
18
|
+
|
19
|
+
def rails_config
|
20
|
+
env = Rails.env.to_s
|
21
|
+
Rails.configuration.database_configuration[env].symbolize_keys
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: koine-db_bkp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcelo Jacobus
|
@@ -88,10 +88,9 @@ files:
|
|
88
88
|
- lib/koine/db_bkp/cli.rb
|
89
89
|
- lib/koine/db_bkp/file_name.rb
|
90
90
|
- lib/koine/db_bkp/mysql/dump.rb
|
91
|
-
- lib/koine/db_bkp/mysql/rails_dump.rb
|
92
91
|
- lib/koine/db_bkp/version.rb
|
93
|
-
- lib/koine/tasks/mysql_dump.
|
94
|
-
- lib/koine/tasks/
|
92
|
+
- lib/koine/tasks/mysql_dump.rb
|
93
|
+
- lib/koine/tasks/rails_mysql_dump.rb
|
95
94
|
homepage: https://github.com/mjacobus/koine-db_bkp
|
96
95
|
licenses:
|
97
96
|
- MIT
|
@@ -1,62 +0,0 @@
|
|
1
|
-
require 'addressable/uri'
|
2
|
-
|
3
|
-
module Koine
|
4
|
-
module DbBkp
|
5
|
-
module Mysql
|
6
|
-
class RailsDump
|
7
|
-
def initialize(config = DatabaseConfig.new.to_h)
|
8
|
-
@backup = Dump.new(config)
|
9
|
-
end
|
10
|
-
|
11
|
-
def to_sql_file(file)
|
12
|
-
@backup.to_sql_file(file)
|
13
|
-
end
|
14
|
-
|
15
|
-
class DatabaseConfig
|
16
|
-
InvalidAdapter = Class.new(StandardError)
|
17
|
-
def to_h
|
18
|
-
config = symbolize_keys(database_configuration[env].to_h)
|
19
|
-
config = merge_url(config) if config[:url]
|
20
|
-
assert_adapter(config[:adapter])
|
21
|
-
config
|
22
|
-
end
|
23
|
-
|
24
|
-
def env
|
25
|
-
Rails.env.to_s
|
26
|
-
end
|
27
|
-
|
28
|
-
def database_configuration
|
29
|
-
Rails.configuration.database_configuration
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def symbolize_keys(hash)
|
35
|
-
{}.tap do |new_hash|
|
36
|
-
hash.each do |key, value|
|
37
|
-
new_hash[key.to_sym] = value
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def merge_url(config)
|
43
|
-
url = config.delete(:url)
|
44
|
-
url = Addressable::URI.parse(url)
|
45
|
-
|
46
|
-
config.merge(
|
47
|
-
adapter: url.scheme,
|
48
|
-
hostname: url.host,
|
49
|
-
database: url.path.split('/').join(''),
|
50
|
-
username: url.user,
|
51
|
-
password: url.password
|
52
|
-
)
|
53
|
-
end
|
54
|
-
|
55
|
-
def assert_adapter(adapter)
|
56
|
-
raise InvalidAdapter unless adapter.to_s =~ /mysql/
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'rake'
|
2
|
-
|
3
|
-
namespace :koine do
|
4
|
-
namespace :mysql do
|
5
|
-
desc 'mysqldump to backup file'
|
6
|
-
task :dump do
|
7
|
-
|
8
|
-
hostname = ENV.fetch('DB_HOST')
|
9
|
-
database = ENV.fetch('DB_NAME')
|
10
|
-
username = ENV.fetch('DB_USER')
|
11
|
-
password = ENV.fetch('DB_PASSWORD') { nil }
|
12
|
-
file_pattern = ENV.fetch('MYSQL_BACKUP_FILE')
|
13
|
-
|
14
|
-
file_pattern = file
|
15
|
-
|
16
|
-
backup = Koine::DbBkp::Mysql::Dump.new(
|
17
|
-
hostname: hostname,
|
18
|
-
database: database,
|
19
|
-
username: username,
|
20
|
-
password: password,
|
21
|
-
)
|
22
|
-
|
23
|
-
backup.to_sql_file(file)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'rake'
|
2
|
-
|
3
|
-
namespace :koine do
|
4
|
-
namespace :mysql do
|
5
|
-
desc 'mysqldump to backup file from rails database'
|
6
|
-
task rails_dump: [:environment] do
|
7
|
-
file_pattern = ENV.fetch('MYSQL_BACKUP_FILE')
|
8
|
-
file_pattern = file
|
9
|
-
|
10
|
-
Koine::DbBkp::Mysql::RailsDump.new.to_sql_file(file)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|