capsum 0.6.1 → 0.7.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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.1
1
+ 0.7.0
@@ -18,7 +18,7 @@ Capistrano::Configuration.instance(true).load do
18
18
  args << "--without #{bundle_without.join(" ")}" unless bundle_without.empty?
19
19
  cmd = "bundle install #{args.join(' ')}"
20
20
 
21
- run "cd #{release_path}; if [ -f Gemfile ]; then #{cmd}; fi"
21
+ run "cd #{release_path}; [ -f Gemfile ] && #{cmd}"
22
22
  end
23
23
  end
24
24
 
@@ -5,39 +5,109 @@ Capistrano::Configuration.instance(true).load do
5
5
  namespace :daemons do
6
6
  desc "Start daemons process"
7
7
  task :start, :roles => :app do
8
- daemons = fetch(:daemons, [])
9
8
  find_servers(:roles => :app).each do |server|
10
- daemons_settings = server.options[:daemons]
11
-
12
- daemons.each do |daemon|
13
- runnable = daemons_settings
14
- runnable = daemons_settings.match(daemon) if daemons_settings.respond_to?(:match)
15
-
16
- run("cd #{current_path}; if [ -e #{daemon} ]; then RAILS_ENV=#{rails_env} #{daemon} start; fi", :hosts => server.host) if runnable
9
+ matcher = server.options[:daemons]
10
+ daemon_list.each do |daemon|
11
+ run "cd #{current_path}; #{daemon[:start]}", :hosts => server.host if match(matcher, daemon)
17
12
  end
18
-
19
13
  end
20
14
  end
21
-
15
+
22
16
  desc "Stop daemons process"
23
17
  task :stop, :roles => :app do
24
- daemons = fetch(:daemons, [])
25
- daemons.each do |daemon|
26
- run "cd #{current_path}; if [ -e #{daemon} ]; then RAILS_ENV=#{rails_env} #{daemon} stop; fi"
18
+ daemon_list.each do |daemon|
19
+ run "cd #{current_path}; #{daemon[:stop]}"
27
20
  end
28
21
  end
29
22
 
30
23
  desc "Restart daemons process"
31
24
  task :restart, :roles => :app do
32
25
  daemons.stop
33
- sleep(4)
26
+ sleep(3)
34
27
  daemons.start
35
28
  end
36
- end
29
+
30
+ desc "install daemons to cron"
31
+ task :update_cron, :roles => :app do
32
+ find_servers(:roles => :app).each do |server|
33
+
34
+ identifier = "#{deploy_to}#daemons"
35
+ schedule_file_path = "%{schedule_dir}/schedule.daemons.rb"
36
+
37
+ whenever_clear_command = "type whenever > /dev/null 2>&1 && whenever --clear-crontab #{identifier} --load-file /dev/null"
38
+ whenever_update_command = "whenever --update-crontab #{identifier} --load-file #{schedule_file_path}"
39
+
40
+ command = "if [ -e #{schedule_file_path} ]; then #{whenever_update_command}; else #{whenever_clear_command}; fi"
41
+
42
+ # on_rollback do
43
+ # schedule_dir = fetch(:previous_release) || release_path
44
+ # run (command % { :schedule_dir => schedule_dir }), :hosts => server.host
45
+ # end
46
+
47
+ matcher = server.options[:daemons]
48
+ daemon_commands = daemon_list.map do |daemon|
49
+ "cd #{current_path}; #{daemon[:start]}" if match(matcher, daemon)
50
+ end.compact
51
+
52
+ if !daemon_commands.empty?
53
+ schedule_content=<<-EOF
54
+ every(:reboot) do
55
+ #{daemon_commands.map{ |cmd| " command #{cmd.inspect}" }.join("\n")}
56
+ end
57
+ EOF
58
+ top.put schedule_content, (schedule_file_path % { :schedule_dir => release_path }), :hosts => server.host
59
+ end
60
+
61
+ run (command % { :schedule_dir => release_path }), :hosts => server.host
62
+ end
63
+ end
64
+
65
+ after "deploy:symlink", "daemons:update_cron"
66
+ after "deploy:rollback", "daemons:update_cron"
37
67
 
38
- after "deploy:start", "daemons:start"
39
- after "deploy:stop", "daemons:stop"
40
- after "deploy:restart", "daemons:restart"
68
+ after "deploy:start", "daemons:start"
69
+ after "deploy:stop", "daemons:stop"
70
+ after "deploy:restart", "daemons:restart"
71
+
72
+ def match(matcher, daemon)
73
+ return matcher.call(daemon[:name]) if matcher.respond_to?(:call)
74
+ return matcher.match(daemon[:name]) if matcher.respond_to?(:match)
75
+
76
+ !!matcher # to boolean
77
+ end
78
+
79
+ def daemon_list
80
+ settings = fetch(:daemons, [])
81
+
82
+ case settings
83
+ when Array
84
+ settings.map { |setting| parse_daemon(setting) }
85
+ when Hash
86
+ settings.map { |pair| parse_daemon(pair[1], :name => pair[0] )}
87
+ else
88
+ [ parse_daemon(settings) ]
89
+ end
90
+ end
91
+
92
+ def parse_daemon(source, options = {})
93
+ daemon = {}
94
+
95
+ case source
96
+ when Array
97
+ daemon[:start] = source.first
98
+ daemon[:stop] = source.last
99
+ when Hash
100
+ daemon = options.merge(source)
101
+ else
102
+ command = source.to_s
103
+ daemon[:start] = "#{command} start RAILS_ENV=#{rails_env}"
104
+ daemon[:stop] = "#{command} stop RAILS_ENV=#{rails_env}"
105
+ end
106
+
107
+ daemon[:name] = daemon[:start] if daemon[:name].nil?
108
+ daemon
109
+ end
110
+ end
41
111
 
42
112
  end
43
113
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capsum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-15 00:00:00.000000000Z
12
+ date: 2011-09-28 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
16
- requirement: &70259402442100 !ruby/object:Gem::Requirement
16
+ requirement: &70303967986700 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.8.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70259402442100
24
+ version_requirements: *70303967986700
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: capistrano_colors
27
- requirement: &70259402441620 !ruby/object:Gem::Requirement
27
+ requirement: &70303967986220 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.5.4
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70259402441620
35
+ version_requirements: *70303967986220
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: capistrano-ext
38
- requirement: &70259402441160 !ruby/object:Gem::Requirement
38
+ requirement: &70303967985760 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.2.1
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70259402441160
46
+ version_requirements: *70303967985760
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: capistrano-helpers
49
- requirement: &70259402489580 !ruby/object:Gem::Requirement
49
+ requirement: &70303967985300 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.6.7
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70259402489580
57
+ version_requirements: *70303967985300
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bundler
60
- requirement: &70259402489200 !ruby/object:Gem::Requirement
60
+ requirement: &70303967984920 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70259402489200
68
+ version_requirements: *70303967984920
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: version
71
- requirement: &70259402488740 !ruby/object:Gem::Requirement
71
+ requirement: &70303967984460 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70259402488740
79
+ version_requirements: *70303967984460
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rake
82
- requirement: &70259402488320 !ruby/object:Gem::Requirement
82
+ requirement: &70303967984040 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70259402488320
90
+ version_requirements: *70303967984040
91
91
  description: Collect gems and recipes related capistrano.
92
92
  email:
93
93
  - Sunteya@gmail.com
@@ -125,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  segments:
127
127
  - 0
128
- hash: -2838886094001922798
128
+ hash: 2977824992252183760
129
129
  required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  none: false
131
131
  requirements:
@@ -134,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
134
  version: '0'
135
135
  segments:
136
136
  - 0
137
- hash: -2838886094001922798
137
+ hash: 2977824992252183760
138
138
  requirements: []
139
139
  rubyforge_project:
140
140
  rubygems_version: 1.8.7