capper 0.3.6 → 0.4.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/Gemfile.lock +1 -1
- data/capper.gemspec +1 -1
- data/lib/capper/base.rb +3 -0
- data/lib/capper/monit.rb +19 -0
- data/lib/capper/templates/unicorn.rb.erb +18 -2
- data/lib/capper/unicorn.rb +11 -4
- data/lib/capper/utils/monit.rb +11 -0
- data/lib/capper/utils/templates.rb +7 -2
- metadata +12 -10
data/Gemfile.lock
CHANGED
data/capper.gemspec
CHANGED
data/lib/capper/base.rb
CHANGED
@@ -16,6 +16,9 @@ include Capper::Utils::Templates
|
|
16
16
|
require 'capper/utils/multistage'
|
17
17
|
include Capper::Utils::Multistage
|
18
18
|
|
19
|
+
require 'capper/utils/monit'
|
20
|
+
include Capper::Utils::Monit
|
21
|
+
|
19
22
|
# define a bunch of defaults that make sense
|
20
23
|
Capper.load do
|
21
24
|
# do not trace by default
|
data/lib/capper/monit.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/base' unless defined?(Capper)
|
2
|
+
|
3
|
+
Capper.load do
|
4
|
+
set(:monitrc) { "#{deploy_to}/.monitrc.local" }
|
5
|
+
|
6
|
+
namespace :monit do
|
7
|
+
task :setup do
|
8
|
+
str = fetch(:monit_configs, {}).join("\n\n")
|
9
|
+
upload_template_string(str, monitrc, :mode => "0644")
|
10
|
+
end
|
11
|
+
|
12
|
+
task :reload do
|
13
|
+
run "monit reload &>/dev/null"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
after "deploy:update_code", "monit:setup"
|
18
|
+
before "deploy:restart", "monit:reload"
|
19
|
+
end
|
@@ -46,8 +46,15 @@ end
|
|
46
46
|
before_fork do |server, worker|
|
47
47
|
# the following is highly recomended for Rails + "preload_app true"
|
48
48
|
# as there's no need for the master process to hold a connection
|
49
|
-
defined?(ActiveRecord::Base)
|
49
|
+
if defined?(ActiveRecord::Base)
|
50
50
|
ActiveRecord::Base.connection.disconnect!
|
51
|
+
end
|
52
|
+
|
53
|
+
if defined?(DataObjects::Pooling)
|
54
|
+
DataObjects::Pooling.pools.each do |pool|
|
55
|
+
pool.dispose
|
56
|
+
end
|
57
|
+
end
|
51
58
|
|
52
59
|
# This allows a new master process to incrementally
|
53
60
|
# phase out the old master process with SIGTTOU to avoid a
|
@@ -66,8 +73,17 @@ end
|
|
66
73
|
|
67
74
|
after_fork do |server, worker|
|
68
75
|
# the following is *required* for Rails + "preload_app true",
|
69
|
-
defined?(ActiveRecord::Base)
|
76
|
+
if defined?(ActiveRecord::Base)
|
70
77
|
ActiveRecord::Base.establish_connection
|
78
|
+
end
|
79
|
+
|
80
|
+
if defined?(Rails)
|
81
|
+
if defined?(ActiveSupport::Cache::DalliStore)
|
82
|
+
if Rails.cache.is_a?(ActiveSupport::Cache::DalliStore)
|
83
|
+
Rails.cache.reset
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
71
87
|
|
72
88
|
# if preload_app is true, then you may also want to check and
|
73
89
|
# restart any other shared sockets/descriptors such as Memcached,
|
data/lib/capper/unicorn.rb
CHANGED
@@ -16,6 +16,13 @@ Capper.load do
|
|
16
16
|
set(:unicorn_config) { "#{config_path}/unicorn.rb" }
|
17
17
|
set(:unicorn_pidfile) { "#{shared_path}/pids/unicorn.pid" }
|
18
18
|
|
19
|
+
monit_config "unicorn", <<EOF
|
20
|
+
check process unicorn
|
21
|
+
with pidfile "<%= shared_path %>/pids/unicorn.pid"
|
22
|
+
start program = "<%= bin_path %>/unicorn start" with timeout 60 seconds
|
23
|
+
stop program = "<%= bin_path %>/unicorn stop"
|
24
|
+
EOF
|
25
|
+
|
19
26
|
namespace :deploy do
|
20
27
|
desc "Start unicorn"
|
21
28
|
task :start, :roles => :app, :except => { :no_release => true } do
|
@@ -36,10 +43,10 @@ Capper.load do
|
|
36
43
|
namespace :unicorn do
|
37
44
|
desc "Generate unicorn configuration files"
|
38
45
|
task :setup, :roles => :app, :except => { :no_release => true } do
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
46
|
+
upload_template_file("unicorn.rb", unicorn_config,
|
47
|
+
:mode => "0644", :prefix => "unicorn")
|
48
|
+
upload_template_file("unicorn.sh", unicorn_script,
|
49
|
+
:mode => "0755", :prefix => "unicorn")
|
43
50
|
end
|
44
51
|
|
45
52
|
desc "Kill unicorn (this should only be used if all else fails)"
|
@@ -7,14 +7,19 @@ class Capper
|
|
7
7
|
# render an erb template from config/deploy/templates to the current
|
8
8
|
# server list. this will render and upload templates serially using a
|
9
9
|
# server-specific @variables binding. see get_binding for details.
|
10
|
-
def
|
10
|
+
def upload_template_file(name, path, options={})
|
11
11
|
template = "config/deploy/templates/#{name}.erb"
|
12
12
|
|
13
13
|
unless File.exist?(template)
|
14
14
|
template = File.expand_path("../../templates/#{name}.erb", __FILE__)
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
str = File.open(template).read
|
18
|
+
upload_template_string(str, path, options)
|
19
|
+
end
|
20
|
+
|
21
|
+
def upload_template_string(str, path, options={})
|
22
|
+
erb = Erubis::Eruby.new(str)
|
18
23
|
prefix = options.delete(:prefix)
|
19
24
|
|
20
25
|
if task = current_task
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.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-08-
|
12
|
+
date: 2011-08-22 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: erubis
|
16
|
-
requirement: &
|
16
|
+
requirement: &11917960 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *11917960
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: capistrano
|
27
|
-
requirement: &
|
27
|
+
requirement: &11917520 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *11917520
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: capistrano_colors
|
38
|
-
requirement: &
|
38
|
+
requirement: &11917100 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *11917100
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &11916600 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *11916600
|
58
58
|
description: Capistrano is a collection of opinionated Capistrano recipes
|
59
59
|
email:
|
60
60
|
- bb@xnull.de
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- lib/capper/gem.rb
|
80
80
|
- lib/capper/git.rb
|
81
81
|
- lib/capper/hoptoad.rb
|
82
|
+
- lib/capper/monit.rb
|
82
83
|
- lib/capper/multistage.rb
|
83
84
|
- lib/capper/rails.rb
|
84
85
|
- lib/capper/rvm.rb
|
@@ -86,6 +87,7 @@ files:
|
|
86
87
|
- lib/capper/templates/unicorn.sh.erb
|
87
88
|
- lib/capper/unicorn.rb
|
88
89
|
- lib/capper/utils/load.rb
|
90
|
+
- lib/capper/utils/monit.rb
|
89
91
|
- lib/capper/utils/multistage.rb
|
90
92
|
- lib/capper/utils/templates.rb
|
91
93
|
- lib/capper/whenever.rb
|