capistrano-sync 0.0.1 → 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/README +5 -1
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/capistrano-sync.gemspec +3 -4
- data/lib/capistrano-sync/sync.rb +40 -14
- metadata +6 -6
data/README
CHANGED
data/Rakefile
CHANGED
@@ -7,6 +7,7 @@ begin
|
|
7
7
|
gemspec.email = "dima.exe@gmail.com"
|
8
8
|
gemspec.homepage = "http://github.com/dima-exe/capistrano-sync"
|
9
9
|
gemspec.authors = ["Dmitry Galinsky"]
|
10
|
+
gemspec.files = Dir.glob('lib/**/*.rb')
|
10
11
|
end
|
11
12
|
rescue LoadError
|
12
13
|
puts "Jeweler not available. Install it with: gem install jeweler"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/capistrano-sync.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{capistrano-sync}
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "0.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Dmitry Galinsky"]
|
12
|
-
s.date = %q{2011-10-
|
12
|
+
s.date = %q{2011-10-07}
|
13
13
|
s.description = %q{Sync db or directories recipes for Capistrano}
|
14
14
|
s.email = %q{dima.exe@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -25,11 +25,10 @@ Gem::Specification.new do |s|
|
|
25
25
|
]
|
26
26
|
s.homepage = %q{http://github.com/dima-exe/capistrano-sync}
|
27
27
|
s.require_paths = ["lib"]
|
28
|
-
s.rubygems_version = %q{1.
|
28
|
+
s.rubygems_version = %q{1.6.2}
|
29
29
|
s.summary = %q{Sync db or directories recipes for Capistrano}
|
30
30
|
|
31
31
|
if s.respond_to? :specification_version then
|
32
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
33
32
|
s.specification_version = 3
|
34
33
|
|
35
34
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
data/lib/capistrano-sync/sync.rb
CHANGED
@@ -15,7 +15,7 @@ module CapistranoSyncTask
|
|
15
15
|
cap.logger.info *args
|
16
16
|
end
|
17
17
|
|
18
|
-
# missing capture
|
18
|
+
# missing capture
|
19
19
|
def _capture(command, options={})
|
20
20
|
output = ""
|
21
21
|
cap.invoke_command(command, options.merge(:once => true)) do |ch, stream, data|
|
@@ -26,6 +26,14 @@ module CapistranoSyncTask
|
|
26
26
|
end
|
27
27
|
output
|
28
28
|
end
|
29
|
+
|
30
|
+
def check_deps
|
31
|
+
system "which pv 2> /dev/null"
|
32
|
+
unless ($?.to_i == 0)
|
33
|
+
puts "FATAL: pv (Pipe Viewer) command not found, please install 'port install pv' or 'brew install pv'"
|
34
|
+
exit(1)
|
35
|
+
end
|
36
|
+
end
|
29
37
|
end
|
30
38
|
|
31
39
|
class Db
|
@@ -40,6 +48,7 @@ module CapistranoSyncTask
|
|
40
48
|
end
|
41
49
|
|
42
50
|
def sync
|
51
|
+
check_deps
|
43
52
|
remote_config = remote_database_config
|
44
53
|
local_config = local_database_config
|
45
54
|
|
@@ -58,9 +67,9 @@ module CapistranoSyncTask
|
|
58
67
|
load_command = __send__(load_method, local_config)
|
59
68
|
ssh_cmd, server = get_ssh_command
|
60
69
|
|
61
|
-
log "
|
70
|
+
log "drop and create local database"
|
62
71
|
drop_and_create_local_db
|
63
|
-
log "
|
72
|
+
log "dump from #{server} and load to local #{local_rails_env} db (see progress)"
|
64
73
|
|
65
74
|
cmd = "#{ssh_cmd} #{dump_command} | pv | #{load_command}"
|
66
75
|
system cmd
|
@@ -152,22 +161,39 @@ module CapistranoSyncTask
|
|
152
161
|
def sync
|
153
162
|
check_deps
|
154
163
|
ssh_cmd, server = get_ssh_command
|
155
|
-
log "
|
164
|
+
log "rsync #{server}:#{from} -> local:#{to} (see progress)"
|
156
165
|
cmd = "#{ssh_cmd} \"tar -cC #{from} .\" |pv -s #{total} | tar -x -C #{to}"
|
166
|
+
cmd = [rsync_command, cat_files_command, pv_command, trash_output_command].join(" | ")
|
157
167
|
system cmd
|
158
168
|
end
|
159
169
|
|
160
170
|
private
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
171
|
+
|
172
|
+
def rsync_command
|
173
|
+
server = cap.find_servers.first
|
174
|
+
rsh = "ssh"
|
175
|
+
rsh = "#{rsh} -p #{server.port}" if server.port
|
176
|
+
cmd = "rsync --verbose --archive --compress --copy-links --delete --rsh='#{rsh}'"
|
177
|
+
cmd << " #{cap[:user]}@#{server.host}:#{from}/"
|
178
|
+
cmd << " #{to}/ 2> /dev/null"
|
179
|
+
end
|
180
|
+
|
181
|
+
def cat_files_command
|
182
|
+
t = to.strip.to_s.gsub(/\/$/, '')
|
183
|
+
%{ruby -e "p=l='_' ; begin ; l.strip! ; puts File.read('#{t}/'+p) if File.file?('#{t}/'+p) ; p=l ; end while l=gets"}
|
184
|
+
end
|
185
|
+
|
186
|
+
def pv_command
|
187
|
+
"pv -s #{total}"
|
188
|
+
end
|
189
|
+
|
190
|
+
def trash_output_command
|
191
|
+
"cat > /dev/null"
|
167
192
|
end
|
193
|
+
|
168
194
|
def total
|
169
195
|
unless @total
|
170
|
-
log "
|
196
|
+
log "calculate files size"
|
171
197
|
@total = _capture("du -sb #{from} | awk '{print $1}'", :once => true).to_i
|
172
198
|
log "TOTAL: #{proxy.number_to_human_size @total}"
|
173
199
|
end
|
@@ -194,12 +220,12 @@ module CapistranoSyncTask
|
|
194
220
|
namespace :dir do
|
195
221
|
desc "sync directory"
|
196
222
|
task :default, :roles => :app do
|
197
|
-
|
198
|
-
to_path = ENV["TO"]
|
199
|
-
if !from_path || !to_path
|
223
|
+
if (ENV["FROM"].blank? || ENV["TO"].blank?)
|
200
224
|
puts "Usage cap sync:dir FROM=<..> TO=<..>"
|
201
225
|
exit(1)
|
202
226
|
end
|
227
|
+
from_path = deploy_to + "/" + ENV["FROM"]
|
228
|
+
to_path = ENV["TO"]
|
203
229
|
s = CapistranoSyncTask::Dir.new(self, from_path, to_path)
|
204
230
|
s.sync
|
205
231
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Dmitry Galinsky
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-10-
|
18
|
+
date: 2011-10-07 00:00:00 +04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements: []
|
65
65
|
|
66
66
|
rubyforge_project:
|
67
|
-
rubygems_version: 1.
|
67
|
+
rubygems_version: 1.6.2
|
68
68
|
signing_key:
|
69
69
|
specification_version: 3
|
70
70
|
summary: Sync db or directories recipes for Capistrano
|