j-cap-recipes 0.0.17 → 0.0.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +12 -14
- data/lib/j-cap-recipes/tasks/database.rake +1 -0
- data/lib/j-cap-recipes/tasks/db.rake +93 -21
- data/lib/j-cap-recipes/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d80bea1e89b26980f0b32a653e182c71e050aff0
|
4
|
+
data.tar.gz: a8d06234ff8e44182e449171f26e193ae4d0cfa5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7ef723ec30da2d92f0dbd01ebcc0c2fb56be446c71e40e6156aee5066329d76eef3d069247fbddf66ba794b6093262585ab07a609039331fdf15d278eecf25c
|
7
|
+
data.tar.gz: 713eebf975e826769b0dcc5808133b6f9c3633e76135c67e3832682460255d3e834f878900dd2b6440f53ff86b0c4c9fcf7b2e06f60fa7284b47fa197ad5a5d9
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,27 +1,25 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
j-cap-recipes (0.0.
|
4
|
+
j-cap-recipes (0.0.18)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
capistrano (3.
|
9
|
+
capistrano (3.4.0)
|
10
10
|
i18n
|
11
11
|
rake (>= 10.0.0)
|
12
|
-
sshkit (
|
13
|
-
|
14
|
-
|
12
|
+
sshkit (~> 1.3)
|
13
|
+
colorize (0.7.5)
|
14
|
+
i18n (0.7.0)
|
15
|
+
net-scp (1.2.1)
|
15
16
|
net-ssh (>= 2.6.5)
|
16
|
-
net-ssh (2.
|
17
|
-
rake (10.
|
18
|
-
sshkit (1.1
|
19
|
-
|
20
|
-
net-
|
21
|
-
|
22
|
-
term-ansicolor (1.2.2)
|
23
|
-
tins (~> 0.8)
|
24
|
-
tins (0.12.0)
|
17
|
+
net-ssh (2.9.2)
|
18
|
+
rake (10.4.2)
|
19
|
+
sshkit (1.7.1)
|
20
|
+
colorize (>= 0.7.0)
|
21
|
+
net-scp (>= 1.1.2)
|
22
|
+
net-ssh (>= 2.8.0)
|
25
23
|
|
26
24
|
PLATFORMS
|
27
25
|
ruby
|
@@ -2,10 +2,10 @@ namespace :db do
|
|
2
2
|
desc 'PG backup'
|
3
3
|
task backup: [:environment, :load_config] do
|
4
4
|
#stamp the filename
|
5
|
-
|
5
|
+
dateformat = ENV['date-format'] || '%Y-%m-%d_%H-%M-%S'
|
6
|
+
datestamp = Time.now.strftime(dateformat)
|
6
7
|
|
7
8
|
#create backups folder
|
8
|
-
backup_dir = ENV['backup-path'] || Rails.root.join('db', 'backups')
|
9
9
|
mkdir_p(backup_dir)
|
10
10
|
|
11
11
|
config = ActiveRecord::Base.connection_config
|
@@ -13,13 +13,13 @@ namespace :db do
|
|
13
13
|
backup_file = File.join(backup_dir, "#{database_name}_#{datestamp}.dump")
|
14
14
|
|
15
15
|
#dump the backup and zip it up
|
16
|
-
dump_command
|
17
|
-
dump_command += postgres_auth_options(config)
|
18
|
-
dump_command += " > #{backup_file}"
|
16
|
+
sh dump_command(config, database_name, backup_file)
|
19
17
|
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
latest_file_name = File.join(backup_dir, "#{database_name}_latest.dump")
|
19
|
+
if File.exist? latest_file_name
|
20
|
+
rm latest_file_name
|
21
|
+
end
|
22
|
+
safe_ln backup_file, latest_file_name
|
23
23
|
end
|
24
24
|
|
25
25
|
desc 'PG restore from the last backup file'
|
@@ -33,13 +33,13 @@ namespace :db do
|
|
33
33
|
execute_task!('db:drop')
|
34
34
|
execute_task!('db:create')
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
restore_command += ' -O -c'
|
39
|
-
sh "#{restore_command} || echo 'done'"
|
36
|
+
command = db_restore_command(config, database_name, backup_file)
|
37
|
+
sh "#{command} || echo 'done'"
|
40
38
|
end
|
41
39
|
|
42
40
|
task :kill_postgres_connections => :environment do
|
41
|
+
config = ActiveRecord::Base.connection_config
|
42
|
+
next if config[:adapter] != "postgresql"
|
43
43
|
db_name = ActiveRecord::Base.connection.current_database
|
44
44
|
pid_column_name = if ActiveRecord::Base.connection.send(:postgresql_version) > 90200
|
45
45
|
'pid'
|
@@ -61,17 +61,89 @@ namespace :db do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
|
64
|
+
desc 'Clean up old dumps'
|
65
|
+
task :cleanup do
|
66
|
+
dumps = FileList.new(File.join(backup_dir, '*.dump')).exclude(/_latest.dump$/)
|
67
|
+
|
68
|
+
if keep_versions > 0 && dumps.count >= keep_versions
|
69
|
+
puts "Keep #{keep_versions} dumps"
|
70
|
+
files = (dumps - dumps.last(keep_versions))
|
71
|
+
if files.any?
|
72
|
+
files.each do |f|
|
73
|
+
rm_r f
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
65
77
|
|
66
|
-
|
67
|
-
|
68
|
-
|
78
|
+
end
|
79
|
+
|
80
|
+
def backup_dir
|
81
|
+
@_backup_dir ||= ENV['backup-path'] || Rails.root.join('db', 'backups')
|
82
|
+
end
|
83
|
+
|
84
|
+
def keep_versions
|
85
|
+
@_keep_versions ||= ENV['ROTATE'].to_i
|
86
|
+
end
|
87
|
+
|
88
|
+
def postgres_dump_command(config, database_name, backup_file)
|
89
|
+
result = "#{postgres_password(config)} pg_dump #{database_name} -w -F c"
|
90
|
+
result += postgres_auth_options(config)
|
91
|
+
result + " > #{backup_file}"
|
92
|
+
end
|
93
|
+
|
94
|
+
def mysql_dump_command(config, database_name, backup_file)
|
95
|
+
result = "mysqldump #{database_name} "
|
96
|
+
result += mysql_auth_options(config)
|
97
|
+
result + " > #{backup_file}"
|
98
|
+
end
|
99
|
+
|
100
|
+
def dump_command(config, database_name, backup_file)
|
101
|
+
case config[:adapter]
|
102
|
+
when /mysql/
|
103
|
+
mysql_dump_command(config, database_name, backup_file)
|
104
|
+
when 'postgresql', 'pg'
|
105
|
+
postgres_dump_command(config, database_name, backup_file)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def db_restore_command(config, database_name, backup_file)
|
110
|
+
case config[:adapter]
|
111
|
+
when /mysql/
|
112
|
+
mysql_restore_command(config, database_name, backup_file)
|
113
|
+
when 'postgresql', 'pg'
|
114
|
+
postgres_restore_command(config, database_name, backup_file)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def postgres_restore_command(config, database_name, backup_file)
|
119
|
+
result = "#{postgres_password(config)} pg_restore -d #{database_name} -F c -w #{backup_file}"
|
120
|
+
result += postgres_auth_options(config)
|
121
|
+
result + ' -O -c'
|
122
|
+
end
|
123
|
+
|
124
|
+
def mysql_restore_command(config, database_name, backup_file)
|
125
|
+
"mysql #{database_name} #{mysql_auth_options(config)} < #{backup_file}"
|
126
|
+
end
|
127
|
+
|
128
|
+
def postgres_password(config)
|
129
|
+
"PGPASSWORD='#{config[:password]}'" if config[:password].present?
|
130
|
+
end
|
131
|
+
|
132
|
+
def postgres_auth_options(config)
|
133
|
+
command_options = ''
|
134
|
+
command_options += " -h #{config[:host]}" if config[:host].present?
|
135
|
+
command_options += " -U #{config[:username]}" if config[:username].present?
|
136
|
+
command_options
|
137
|
+
end
|
138
|
+
|
139
|
+
def mysql_auth_options(config)
|
140
|
+
command_options = ''
|
141
|
+
command_options += "--password='#{config[:password]}'" if config[:password].present?
|
142
|
+
command_options += " -h #{config[:host]}" if config[:host].present?
|
143
|
+
command_options += " -u #{config[:username]}" if config[:username].present?
|
144
|
+
command_options
|
145
|
+
end
|
69
146
|
|
70
|
-
def postgres_auth_options(config)
|
71
|
-
command_options = ''
|
72
|
-
command_options += " -h #{config[:hostname]}" if config[:hostname].present?
|
73
|
-
command_options += " -U #{config[:username]}" if config[:username].present?
|
74
|
-
command_options
|
75
147
|
end
|
76
148
|
|
77
149
|
#TODO: Use setting to get S3 credentials
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: j-cap-recipes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Nikitochkin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -130,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
130
|
version: '0'
|
131
131
|
requirements: []
|
132
132
|
rubyforge_project:
|
133
|
-
rubygems_version: 2.4.
|
133
|
+
rubygems_version: 2.4.6
|
134
134
|
signing_key:
|
135
135
|
specification_version: 4
|
136
136
|
summary: Capistrano 3 recipes for nginx, monit, rails log, setup, unicorn
|