mongrel_cluster 0.1 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +24 -1
- data/Rakefile +4 -3
- data/lib/mongrel_cluster/init.rb +46 -51
- data/lib/mongrel_cluster/recipes.rb +55 -0
- metadata +7 -6
data/README
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
== Mongrel Cluster Plugin
|
2
2
|
|
3
|
-
Tool to help start/stop/restart multiple mongrel servers to use behind a load balancer like Pound or Balance. This plugin adds an option to specify a number of Mongrel servers to launch, a range of ports, and a configuration file for the cluster. Use "-h" to see command syntax.
|
3
|
+
Tool to help start/stop/restart multiple mongrel servers to use behind a load balancer like Pound, Pen or Balance. This plugin adds an option to specify a number of Mongrel servers to launch, a range of ports, and a configuration file for the cluster. Use "-h" to see command syntax.
|
4
4
|
|
5
5
|
Configure cluster and write configuration file:
|
6
6
|
mongrel_rails cluster::configure
|
@@ -15,3 +15,26 @@ Stop cluster:
|
|
15
15
|
mongrel_rails cluster::stop
|
16
16
|
|
17
17
|
|
18
|
+
Capistrano Recipe
|
19
|
+
|
20
|
+
Add to deploy.rb:
|
21
|
+
require 'mongrel_cluster/recipes'
|
22
|
+
|
23
|
+
Example usage:
|
24
|
+
cap -a configure_mongrel_cluster
|
25
|
+
|
26
|
+
Variables
|
27
|
+
mongrel_servers: Number of Mongrel servers to start.
|
28
|
+
mongrel_port: Starting port to bind to.
|
29
|
+
mongrel_address: Address to bind to.
|
30
|
+
mongrel_environment: Rails environment to run as.
|
31
|
+
mongrel_config: Path to config file.
|
32
|
+
use_sudo: Whether or not tasks that can use sudo, ought to use sudo. Capistrano defaults to true.
|
33
|
+
|
34
|
+
Tasks (performed on :app role)
|
35
|
+
configure_mongrel_cluster: Configure the cluster with variables. Uses sudo if use_sudo is true.
|
36
|
+
start_mongrel_cluster: Start Mongrel processes on the app server. Uses sudo if use_sudo is true.
|
37
|
+
stop_mongrel_cluster: Stop the Mongrel processes on the app server. Uses sudo if use_sudo is true.
|
38
|
+
restart_mongrel_cluster: Restart the Mongrel processes on the app server. Uses sudo if use_sudo is true.
|
39
|
+
restart: Calls restart_mongrel_cluster to allow Mongrel to be used with the standard Capistrano deploy task.
|
40
|
+
spinner: Calls start_mongrel_cluster to allow Mongrel to be used with the standard Capistrano cold_deploy task.
|
data/Rakefile
CHANGED
@@ -15,16 +15,17 @@ setup_rdoc ['README', 'LICENSE', 'COPYING', 'lib/**/*.rb', 'doc/**/*.rdoc']
|
|
15
15
|
desc "Does a full compile, test run"
|
16
16
|
task :default => [:test, :package]
|
17
17
|
|
18
|
-
version="0.1"
|
18
|
+
version="0.1.1"
|
19
19
|
name="mongrel_cluster"
|
20
20
|
|
21
21
|
setup_gem(name, version) do |spec|
|
22
|
-
spec.summary = "
|
22
|
+
spec.summary = "Mongrel plugin that provides commands and Capistrano tasks for managing multiple Mongrel processes."
|
23
23
|
spec.description = spec.summary
|
24
24
|
spec.author="Bradley Taylor"
|
25
25
|
spec.add_dependency('gem_plugin', '>= 0.2.1')
|
26
|
-
spec.add_dependency('mongrel', '>= 0.3.12.
|
26
|
+
spec.add_dependency('mongrel', '>= 0.3.12.4')
|
27
27
|
spec.files += Dir.glob("resources/**/*")
|
28
|
+
spec.has_rdoc = false
|
28
29
|
end
|
29
30
|
|
30
31
|
|
data/lib/mongrel_cluster/init.rb
CHANGED
@@ -8,7 +8,7 @@ module Cluster
|
|
8
8
|
include Mongrel::Command::Base
|
9
9
|
|
10
10
|
def configure
|
11
|
-
options [['-C', '--config PATH', "Path to
|
11
|
+
options [['-C', '--config PATH', "Path to configuration file", :@config_file, "config/mongrel_cluster.yml"]]
|
12
12
|
end
|
13
13
|
|
14
14
|
def validate
|
@@ -18,10 +18,7 @@ module Cluster
|
|
18
18
|
|
19
19
|
def run
|
20
20
|
@options = {
|
21
|
-
"environment" => ENV['RAILS_ENV'] || "development",
|
22
21
|
"port" => 3000,
|
23
|
-
"address" => "0.0.0.0",
|
24
|
-
"log_file" => "log/mongrel.log",
|
25
22
|
"pid_file" => "log/mongrel.pid",
|
26
23
|
"servers" => 2
|
27
24
|
}
|
@@ -35,16 +32,16 @@ module Cluster
|
|
35
32
|
argv = [ "mongrel_rails" ]
|
36
33
|
argv << "start"
|
37
34
|
argv << "-d"
|
38
|
-
argv << "-e #{@options["environment"]}"
|
35
|
+
argv << "-e #{@options["environment"]}" if @options["environment"]
|
39
36
|
argv << "-p #{port+i}"
|
40
|
-
argv << "-a #{@options["address"]}"
|
41
|
-
argv << "-l #{@options["log_file"]}"
|
42
|
-
argv << "-P #{pid[0]}
|
43
|
-
argv << "-c #{@options["cwd"]}"
|
44
|
-
argv << "-t #{@options["timeout"]}"
|
37
|
+
argv << "-a #{@options["address"]}" if @options["address"]
|
38
|
+
argv << "-l #{@options["log_file"]}" if @options["log_file"]
|
39
|
+
argv << "-P #{pid[0]}.#{port+i}.#{pid[1]}"
|
40
|
+
argv << "-c #{@options["cwd"]}" if @options["cwd"]
|
41
|
+
argv << "-t #{@options["timeout"]}" if @options["timeout"]
|
45
42
|
argv << "-m #{@options["mime_map"]}" if @options["mime_map"]
|
46
|
-
argv << "-r #{@options["docroot"]}"
|
47
|
-
argv << "-n #{@options["
|
43
|
+
argv << "-r #{@options["docroot"]}" if @options["docroot"]
|
44
|
+
argv << "-n #{@options["num_procs"]}" if @options["num_procs"]
|
48
45
|
argv << "-B" if @options["debug"]
|
49
46
|
argv << "-S #{@options["config_script"]}" if @options["config_script"]
|
50
47
|
cmd = argv.join " "
|
@@ -74,18 +71,22 @@ module Cluster
|
|
74
71
|
@options = {
|
75
72
|
"environment" => ENV['RAILS_ENV'] || "development",
|
76
73
|
"port" => 3000,
|
77
|
-
"address" => "0.0.0.0",
|
78
|
-
"log_file" => "log/mongrel.log",
|
79
74
|
"pid_file" => "log/mongrel.pid",
|
80
75
|
"servers" => 2
|
81
76
|
}
|
82
77
|
|
83
78
|
@conf_options = YAML.load_file(@config_file)
|
84
79
|
@options.merge! @conf_options if @conf_options
|
80
|
+
port = @options["port"].to_i - 1
|
85
81
|
pid = @options["pid_file"].split(".")
|
86
82
|
puts "Stopping #{@options["servers"]} Mongrel servers..."
|
87
83
|
1.upto(@options["servers"].to_i) do |i|
|
88
|
-
|
84
|
+
argv = [ "mongrel_rails" ]
|
85
|
+
argv << "stop"
|
86
|
+
argv << "-P #{pid[0]}.#{port+i}.#{pid[1]}"
|
87
|
+
argv << "-c #{@options["cwd"]}" if @options["cwd"]
|
88
|
+
argv << "-f" if @force
|
89
|
+
cmd = argv.join " "
|
89
90
|
puts cmd
|
90
91
|
status = `#{cmd}`
|
91
92
|
puts status
|
@@ -110,20 +111,23 @@ module Cluster
|
|
110
111
|
|
111
112
|
def run
|
112
113
|
@options = {
|
113
|
-
"environment" => ENV['RAILS_ENV'] || "development",
|
114
114
|
"port" => 3000,
|
115
|
-
"address" => "0.0.0.0",
|
116
|
-
"log_file" => "log/mongrel.log",
|
117
115
|
"pid_file" => "log/mongrel.pid",
|
118
116
|
"servers" => 2
|
119
117
|
}
|
120
118
|
|
121
119
|
@conf_options = YAML.load_file(@config_file)
|
122
120
|
@options.merge! @conf_options if @conf_options
|
121
|
+
port = @options["port"].to_i - 1
|
123
122
|
pid = @options["pid_file"].split(".")
|
124
123
|
puts "Restarting #{@options["servers"]} Mongrel servers..."
|
125
124
|
1.upto(@options["servers"].to_i) do |i|
|
126
|
-
|
125
|
+
argv = [ "mongrel_rails" ]
|
126
|
+
argv << "restart"
|
127
|
+
argv << "-P #{pid[0]}.#{port+i}.#{pid[1]}"
|
128
|
+
argv << "-c #{@options["cwd"]}" if @options["cwd"]
|
129
|
+
argv << "-s" if @soft
|
130
|
+
cmd = argv.join " "
|
127
131
|
puts cmd
|
128
132
|
status = `#{cmd}`
|
129
133
|
puts status
|
@@ -136,17 +140,17 @@ module Cluster
|
|
136
140
|
|
137
141
|
def configure
|
138
142
|
options [
|
139
|
-
["-e", "--environment ENV", "Rails environment to run as", :@environment,
|
143
|
+
["-e", "--environment ENV", "Rails environment to run as", :@environment, nil],
|
140
144
|
['-p', '--port PORT', "Starting port to bind to", :@port, 3000],
|
141
|
-
['-a', '--address ADDR', "Address to bind to", :@address,
|
142
|
-
['-l', '--log FILE', "Where to write log messages", :@log_file,
|
145
|
+
['-a', '--address ADDR', "Address to bind to", :@address, nil],
|
146
|
+
['-l', '--log FILE', "Where to write log messages", :@log_file, nil],
|
143
147
|
['-P', '--pid FILE', "Where to write the PID", :@pid_file, "log/mongrel.pid"],
|
144
|
-
['-c', '--chdir PATH', "Change to dir before starting (will be expanded)", :@cwd,
|
145
|
-
['-t', '--timeout SECONDS', "Timeout all requests after SECONDS time", :@timeout,
|
148
|
+
['-c', '--chdir PATH', "Change to dir before starting (will be expanded)", :@cwd, nil],
|
149
|
+
['-t', '--timeout SECONDS', "Timeout all requests after SECONDS time", :@timeout, nil],
|
146
150
|
['-m', '--mime PATH', "A YAML file that lists additional MIME types", :@mime_map, nil],
|
147
|
-
['-r', '--root PATH', "Set the document root (default 'public')", :@docroot,
|
148
|
-
['-n', '--num-procs INT', "Number of processor threads to use", :@num_procs,
|
149
|
-
['-B', '--debug', "Enable debugging mode", :@debug,
|
151
|
+
['-r', '--root PATH', "Set the document root (default 'public')", :@docroot, nil],
|
152
|
+
['-n', '--num-procs INT', "Number of processor threads to use", :@num_procs, nil],
|
153
|
+
['-B', '--debug', "Enable debugging mode", :@debug, nil],
|
150
154
|
['-S', '--script PATH', "Load the given file as an extra config script.", :@config_script, nil],
|
151
155
|
['-N', '--num-servers INT', "Number of Mongrel servers", :@servers, 2],
|
152
156
|
['-C', '--config PATH', "Path to config file", :@config_file, "config/mongrel_cluster.yml"]
|
@@ -155,43 +159,34 @@ module Cluster
|
|
155
159
|
|
156
160
|
def validate
|
157
161
|
@servers = @servers.to_i
|
158
|
-
@port = @port.to_i
|
159
|
-
@timeout = @timeout.to_i
|
160
162
|
|
161
|
-
@cwd = File.expand_path(@cwd)
|
162
|
-
valid_dir? @cwd, "Invalid path to change to during daemon mode: #{@cwd}"
|
163
163
|
valid?(@servers > 0, "Must give a valid number of servers")
|
164
|
-
valid?(@port > 0, "Must give a valid starting port")
|
165
|
-
valid?(@timeout > 0, "Must give a valid timeout for requests")
|
166
|
-
|
167
|
-
valid_dir? File.dirname(@log_file), "Path to log file not valid: #{@log_file}"
|
168
|
-
valid_dir? File.dirname(@pid_file), "Path to pid file not valid: #{@pid_file}"
|
169
164
|
valid_dir? File.dirname(@config_file), "Path to config file not valid: #{@config_file}"
|
170
165
|
|
171
|
-
valid_dir? File.dirname(@docroot), "Path to docroot not valid: #{@docroot}"
|
172
|
-
valid_exists? @mime_map, "MIME mapping file does not exist: #{@mime_map}" if @mime_map
|
173
|
-
|
174
166
|
return @valid
|
175
167
|
end
|
176
168
|
|
177
169
|
def run
|
178
170
|
@options = {
|
179
|
-
"environment" => @environment,
|
180
171
|
"port" => @port,
|
181
|
-
"address" => @address,
|
182
|
-
"log_file" => @log_file,
|
183
|
-
"pid_file" => @pid_file,
|
184
172
|
"servers" => @servers,
|
185
|
-
"
|
186
|
-
"timeout" => @timeout,
|
187
|
-
"mime_map" => @mime_map,
|
188
|
-
"docroot" => @docroot,
|
189
|
-
"debug" => @debug,
|
190
|
-
"config_script" => @config_script,
|
191
|
-
"num-procs" => @num_procs
|
173
|
+
"pid_file" => @pid_file
|
192
174
|
}
|
175
|
+
|
176
|
+
@options["log_file"] = @log_file if @log_file
|
177
|
+
@options["debug"] = @debug if @debug
|
178
|
+
@options["num_procs"] = @num_procs if @num_procs
|
179
|
+
@options["docroot"] = @docroot if @docroots
|
180
|
+
@options["address"] = @address if @address
|
181
|
+
@options["timeout"] = @timeout if @timeout
|
182
|
+
@options["environment"] = @environment if @environment
|
183
|
+
@options["mime_map"] = @mime_map if @mime_map
|
184
|
+
@options["config_script"] = @config_script if @config_script
|
185
|
+
@options["cwd"] = @cwd if @cwd
|
186
|
+
|
193
187
|
puts "Writing configuration file to #{@config_file}."
|
194
188
|
File.open(@config_file,"w") {|f| f.write(@options.to_yaml)}
|
195
189
|
end
|
196
190
|
end
|
197
|
-
end
|
191
|
+
end
|
192
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
Capistrano.configuration(:must_exist).load do
|
2
|
+
set :mongrel_servers, "2"
|
3
|
+
set :mongrel_port, "8000"
|
4
|
+
set :mongrel_address, "127.0.0.1"
|
5
|
+
set :mongrel_environment, "production"
|
6
|
+
set(:mongrel_config) { "#{deploy_to}/config/mongrel_cluster.yml" }
|
7
|
+
|
8
|
+
desc <<-DESC
|
9
|
+
Configure Mongrel processes on the app server. This uses the :use_sudo
|
10
|
+
variable to determine whether to use sudo or not.
|
11
|
+
DESC
|
12
|
+
task :configure_mongrel_cluster, :roles => :app do
|
13
|
+
send(run_method, "if [ ! -d #{File.dirname(mongrel_config)} ]; then mkdir -p #{File.dirname(mongrel_config)}; fi")
|
14
|
+
send(run_method, "mongrel_rails cluster::configure -N #{mongrel_servers} -p #{mongrel_port} -e #{mongrel_environment} -a #{mongrel_address} -c #{current_path} -C #{mongrel_config}")
|
15
|
+
end
|
16
|
+
|
17
|
+
desc <<-DESC
|
18
|
+
Start Mongrel processes on the app server. This uses the :use_sudo
|
19
|
+
variable to determine whether to use sudo or not.
|
20
|
+
DESC
|
21
|
+
task :start_mongrel_cluster , :roles => :app do
|
22
|
+
send(run_method, "mongrel_rails cluster::start -C #{mongrel_config}")
|
23
|
+
end
|
24
|
+
|
25
|
+
desc <<-DESC
|
26
|
+
Restart the Mongrel processes on the app server. This uses the :use_sudo
|
27
|
+
variable to determine whether to use sudo or not.
|
28
|
+
DESC
|
29
|
+
task :restart_mongrel_cluster , :roles => :app do
|
30
|
+
send(run_method, "mongrel_rails cluster::restart -C #{mongrel_config}")
|
31
|
+
end
|
32
|
+
|
33
|
+
desc <<-DESC
|
34
|
+
Stop the Mongrel processes on the app server. This uses the :use_sudo
|
35
|
+
variable to determine whether to use sudo or not.
|
36
|
+
DESC
|
37
|
+
task :stop_mongrel_cluster , :roles => :app do
|
38
|
+
send(run_method, "mongrel_rails cluster::stop -C #{mongrel_config}")
|
39
|
+
end
|
40
|
+
|
41
|
+
desc <<-DESC
|
42
|
+
Restart the Mongrel processes on the app server by calling restart_mongrel_cluster.
|
43
|
+
DESC
|
44
|
+
task :restart, :roles => :app do
|
45
|
+
restart_mongrel_cluster
|
46
|
+
end
|
47
|
+
|
48
|
+
desc <<-DESC
|
49
|
+
Start the Mongrel processes on the app server by calling start_mongrel_cluster.
|
50
|
+
DESC
|
51
|
+
task :spinner, :roles => :app do
|
52
|
+
start_mongrel_cluster
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
metadata
CHANGED
@@ -3,19 +3,19 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: mongrel_cluster
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version:
|
7
|
-
date: 2006-
|
8
|
-
summary:
|
6
|
+
version: 0.1.1
|
7
|
+
date: 2006-05-01 00:00:00 -04:00
|
8
|
+
summary: Mongrel plugin that provides commands and Capistrano tasks for managing multiple Mongrel processes.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email:
|
12
12
|
homepage:
|
13
13
|
rubyforge_project:
|
14
|
-
description:
|
14
|
+
description: Mongrel plugin that provides commands and Capistrano tasks for managing multiple Mongrel processes.
|
15
15
|
autorequire:
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
18
|
-
has_rdoc:
|
18
|
+
has_rdoc: false
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ">"
|
@@ -34,6 +34,7 @@ files:
|
|
34
34
|
- Rakefile
|
35
35
|
- lib/mongrel_cluster
|
36
36
|
- lib/mongrel_cluster/init.rb
|
37
|
+
- lib/mongrel_cluster/recipes.rb
|
37
38
|
- tools/rakehelp.rb
|
38
39
|
- resources/defaults.yaml
|
39
40
|
test_files: []
|
@@ -65,5 +66,5 @@ dependencies:
|
|
65
66
|
requirements:
|
66
67
|
- - ">="
|
67
68
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.3.12.
|
69
|
+
version: 0.3.12.4
|
69
70
|
version:
|