capsum 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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