capitate 0.2.3 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +14 -0
- data/Manifest.txt +10 -2
- data/docs/recipes/imagemagick-centos.txt +6 -0
- data/docs/recipes/index.txt +9 -6
- data/docs/recipes/memcached-centos.txt +7 -0
- data/docs/recipes/memcached-monit.txt +30 -0
- data/docs/recipes/memcached.txt +1 -27
- data/docs/recipes/{mongrel_cluster-centos.txt → mongrel-cluster-centos.txt} +12 -8
- data/docs/recipes/{mongrel_cluster.txt → mongrel-cluster-monit.txt} +12 -16
- data/docs/recipes/mongrel-cluster.txt +9 -0
- data/docs/recipes/mongrel.txt +9 -0
- data/docs/recipes/monit-centos.txt +2 -0
- data/docs/recipes/mysql-monit.txt +28 -0
- data/docs/recipes/mysql.txt +3 -19
- data/docs/recipes/nginx-centos.txt +9 -0
- data/docs/recipes/nginx-mongrel.txt +33 -0
- data/docs/recipes/nginx-monit.txt +26 -0
- data/docs/recipes/nginx.txt +2 -44
- data/docs/recipes/ruby-centos.txt +9 -0
- data/docs/recipes/sphinx-centos.txt +8 -0
- data/docs/recipes/sphinx-monit.txt +22 -0
- data/docs/recipes/sphinx.txt +1 -11
- data/lib/capitate/cap_ext/connections.rb +15 -13
- data/lib/capitate/cap_ext/roles.rb +26 -0
- data/lib/capitate/plugins/base.rb +1 -0
- data/lib/capitate/plugins/prompt.rb +49 -6
- data/lib/capitate/plugins/script.rb +17 -13
- data/lib/capitate/recipes.rb +0 -3
- data/lib/capitate/version.rb +1 -1
- data/lib/capitate.rb +3 -0
- data/lib/deployment/deploy.rb +4 -7
- data/lib/deployment/install-centos-rubyweb.rb +3 -3
- data/lib/recipes/centos/centos.rb +17 -9
- data/lib/recipes/centos/imagemagick.rb +6 -0
- data/lib/recipes/centos/memcached.rb +6 -0
- data/lib/recipes/centos/mongrel_cluster.rb +42 -28
- data/lib/recipes/centos/monit.rb +2 -1
- data/lib/recipes/centos/mysql.rb +1 -1
- data/lib/recipes/centos/nginx.rb +8 -0
- data/lib/recipes/centos/ruby.rb +10 -2
- data/lib/recipes/centos/sphinx.rb +8 -1
- data/lib/recipes/memcached.rb +20 -22
- data/lib/recipes/mongrel_cluster.rb +60 -50
- data/lib/recipes/mysql.rb +21 -17
- data/lib/recipes/nginx.rb +47 -39
- data/lib/recipes/rails.rb +10 -0
- data/lib/recipes/sphinx.rb +15 -11
- data/lib/templates/mongrel/mongrel_cluster.initd.erb +6 -6
- data/lib/templates/mongrel/mongrel_cluster.monitrc.erb +2 -2
- data/lib/templates/mongrel/mongrel_cluster.yml.erb +1 -1
- data/lib/templates/nginx/nginx_vhost.conf.erb +8 -4
- data/lib/templates/rails/database.yml.erb +1 -2
- data/website/index.html +1 -1
- metadata +21 -6
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'md5'
|
1
2
|
|
2
3
|
module Capitate::Plugins::Prompt
|
3
4
|
|
@@ -5,21 +6,63 @@ module Capitate::Plugins::Prompt
|
|
5
6
|
Capistrano::CLI.ui.ask(label, &block)
|
6
7
|
end
|
7
8
|
|
8
|
-
|
9
|
+
# Prompt for password.
|
10
|
+
#
|
11
|
+
# ==== Options
|
12
|
+
# +label+:: Label
|
13
|
+
# +options+:: Options
|
14
|
+
# - +verify+:: If true, prompt twice and verify
|
15
|
+
# - +lazy+:: If true, returns a block. _Defaults to true_
|
16
|
+
# - +check_hash+:: If present, checks that md5 is same as password md5
|
17
|
+
#
|
18
|
+
def password(label, options = {})
|
19
|
+
|
20
|
+
verify = options[:verify]
|
21
|
+
lazy = options[:lazy].nil? ? true : options[:lazy]
|
22
|
+
check_hash = options[:check_hash]
|
23
|
+
|
9
24
|
# Lazy
|
10
25
|
password_prompt = Proc.new {
|
11
|
-
|
26
|
+
|
27
|
+
max_attempts = 2
|
28
|
+
attempts = 0
|
29
|
+
password = nil
|
30
|
+
success = true
|
31
|
+
|
32
|
+
loop {
|
33
|
+
password = Capistrano::CLI.password_prompt(label)
|
34
|
+
attempts += 1
|
12
35
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
36
|
+
if verify
|
37
|
+
password_verify = Capistrano::CLI.password_prompt("[VERIFY] #{label}")
|
38
|
+
if password != password_verify
|
39
|
+
logger.important "Passwords do not match"
|
40
|
+
success = false
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
if check_hash
|
45
|
+
if MD5.md5(password).hexdigest != check_hash
|
46
|
+
logger.important "Invalid password, try again."
|
47
|
+
success = false
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
break if success
|
52
|
+
break if attempts >= max_attempts
|
53
|
+
}
|
54
|
+
|
55
|
+
raise "Invalid password, too many tries" unless success
|
17
56
|
|
18
57
|
password
|
19
58
|
}
|
20
59
|
|
21
60
|
return password_prompt if lazy
|
22
61
|
password_prompt.call
|
62
|
+
end
|
63
|
+
|
64
|
+
def check_password_hash(password, hash)
|
65
|
+
MD5.md5()
|
23
66
|
end
|
24
67
|
|
25
68
|
end
|
@@ -51,11 +51,8 @@ module Capitate::Plugins::Script
|
|
51
51
|
build_dest = options[:build_dest]
|
52
52
|
build_dest ||= "/tmp/#{name}"
|
53
53
|
url = options[:url]
|
54
|
-
dependencies = options[:dependencies]
|
55
54
|
|
56
|
-
|
57
|
-
|
58
|
-
unpack(url, build_dest, options[:clean], options[:unpack_dir]) do |dir|
|
55
|
+
unpack(url, build_dest, options) do |dir|
|
59
56
|
yield(dir) if block_given?
|
60
57
|
end
|
61
58
|
end
|
@@ -85,7 +82,10 @@ module Capitate::Plugins::Script
|
|
85
82
|
end
|
86
83
|
|
87
84
|
# If want verbose, -v
|
88
|
-
|
85
|
+
run_all <<-CMDS
|
86
|
+
sh -v #{dest}
|
87
|
+
rm -rf #{File.dirname(dest)}
|
88
|
+
CMDS
|
89
89
|
end
|
90
90
|
|
91
91
|
# Download and unpack URL.
|
@@ -94,15 +94,16 @@ module Capitate::Plugins::Script
|
|
94
94
|
# ==== Options
|
95
95
|
# +url+:: URL to download
|
96
96
|
# +dest+:: Destination directory
|
97
|
-
# +
|
98
|
-
# +
|
97
|
+
# +options+::
|
98
|
+
# - +clean+:: If true will remove the unpacked directory. _Defaults to true_
|
99
|
+
# - +unpack_dir+:: Directory that is unpacked from tgz (if not matching the file name)
|
99
100
|
#
|
100
101
|
# ==== Examples
|
101
102
|
# script.unpack("http://rubyforge.org/frs/download.php/29548/rubygems-1.0.1.tgz", "/tmp/rubygems") do
|
102
103
|
# sudo "ruby setup.rb"
|
103
104
|
# end
|
104
105
|
#
|
105
|
-
def unpack(url, dest,
|
106
|
+
def unpack(url, dest, options, &block)
|
106
107
|
file = url.split("/").last
|
107
108
|
|
108
109
|
# TODO: Support other types
|
@@ -110,12 +111,16 @@ module Capitate::Plugins::Script
|
|
110
111
|
raise "Can't unpack this file: #{file}; only support tar.gz and tgz formats"
|
111
112
|
end
|
112
113
|
|
114
|
+
options[:clean] = true if options[:clean].nil?
|
115
|
+
unpack_dir = options[:unpack_dir]
|
116
|
+
clean = options[:clean]
|
117
|
+
|
113
118
|
unpack_dir ||= file.gsub(/\.tar\.gz|\.tgz/, "")
|
114
119
|
|
115
120
|
http_get_method = fetch(:http_get_method, "wget -nv")
|
116
|
-
|
121
|
+
|
117
122
|
run_all <<-CMDS
|
118
|
-
mkdir -p #{dest} && cd #{dest} && #{http_get_method} #{url}
|
123
|
+
sh -c "mkdir -p #{dest} && cd #{dest} && #{http_get_method} #{url}"
|
119
124
|
sh -c "cd #{dest} && tar zxf #{file}"
|
120
125
|
CMDS
|
121
126
|
|
@@ -133,10 +138,9 @@ module Capitate::Plugins::Script
|
|
133
138
|
# +cmds+:: Commands (separated by newlines)
|
134
139
|
# +options+:: See invoke_command options
|
135
140
|
#
|
136
|
-
def run_all(cmds, options = {}, &block)
|
141
|
+
def run_all(cmds, options = {}, &block)
|
137
142
|
cmds.split("\n").each do |cmd|
|
138
|
-
cmd = cmd.gsub(/^\s+/, "")
|
139
|
-
#sh_cmd = %{sh -c "#{cmd.gsub("\"", "\"\"")}"}
|
143
|
+
cmd = cmd.gsub(/^\s+/, "")
|
140
144
|
run_via(cmd, options, &block)
|
141
145
|
end
|
142
146
|
end
|
data/lib/capitate/recipes.rb
CHANGED
data/lib/capitate/version.rb
CHANGED
data/lib/capitate.rb
CHANGED
@@ -21,14 +21,17 @@ require 'capitate/plugins/templates'
|
|
21
21
|
require 'capitate/plugins/upload'
|
22
22
|
require 'capitate/plugins/yum'
|
23
23
|
|
24
|
+
# Extensions + Patches
|
24
25
|
require "capitate/cap_ext/connections"
|
25
26
|
require "capitate/cap_ext/extension_proxy"
|
26
27
|
require "capitate/cap_ext/variables"
|
27
28
|
require "capitate/cap_ext/run_via"
|
29
|
+
require "capitate/cap_ext/roles"
|
28
30
|
|
29
31
|
class Capistrano::Configuration
|
30
32
|
include Capitate::CapExt::Variables
|
31
33
|
include Capitate::CapExt::RunVia
|
34
|
+
include Capitate::CapExt::Roles
|
32
35
|
end
|
33
36
|
|
34
37
|
require 'capitate/task_node'
|
data/lib/deployment/deploy.rb
CHANGED
@@ -28,15 +28,12 @@ role :db, "192.168.1.111", :primary => true
|
|
28
28
|
# Callbacks
|
29
29
|
before "deploy:setup", "centos:add_user"
|
30
30
|
|
31
|
-
after "deploy:setup", "mysql:setup", "rails:setup", "
|
32
|
-
"nginx:
|
31
|
+
after "deploy:setup", "mysql:setup", "rails:setup", "mongrel:cluster:centos:setup",
|
32
|
+
"nginx:mongrel:setup", "sphinx:centos:setup", "sphinx:setup_monit", "mongrel:cluster:monit:setup"
|
33
33
|
|
34
|
-
after "
|
35
|
-
after "mongrel_cluster:centos:setup", "mongrel_cluster:setup_monit"
|
34
|
+
after "nginx:mongrel:setup", "nginx:centos:restart"
|
36
35
|
|
37
|
-
after "
|
38
|
-
|
39
|
-
after "deploy:update_code", "rails:update_code", "sphinx:update_code"
|
36
|
+
after "deploy:update_code", "rails:update_code", "sphinx:update_conf"
|
40
37
|
|
41
38
|
# Auto cleanup after deploy
|
42
39
|
after "deploy", "deploy:cleanup"
|
@@ -53,12 +53,12 @@ task :install do
|
|
53
53
|
#
|
54
54
|
# Install monit hooks
|
55
55
|
#
|
56
|
-
nginx.
|
57
|
-
mysql.
|
56
|
+
nginx.monit.install
|
57
|
+
mysql.monit.install
|
58
58
|
|
59
59
|
# Gem installs
|
60
60
|
gems.install([ "rake", "mysql -- --with-mysql-include=/usr/include/mysql --with-mysql-lib=/usr/lib/mysql --with-mysql-config",
|
61
|
-
"raspell", "rmagick", "mongrel", "mongrel_cluster","json" ])
|
61
|
+
"raspell", "rmagick", "mongrel", "mongrel_cluster","json", "mime-types" ])
|
62
62
|
|
63
63
|
# Cleanup
|
64
64
|
yum.clean
|
@@ -26,18 +26,26 @@ namespace :centos do
|
|
26
26
|
adduser_options << "-d #{home}" unless home.blank?
|
27
27
|
adduser_options << "-G #{groups}" unless groups.blank?
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
user_existed = false
|
30
|
+
run "id #{user_add} || /usr/sbin/adduser #{adduser_options.join(" ")} #{user_add}" do |channel, stream, data|
|
31
|
+
logger.info data
|
32
|
+
user_existed = data =~ /uid/
|
33
|
+
end
|
34
|
+
|
35
|
+
logger.info "User already existed, aborting..." if user_existed
|
36
|
+
|
37
|
+
unless user_existed
|
38
|
+
run "chmod a+rx #{home}" if home_readable
|
32
39
|
|
33
|
-
|
40
|
+
new_password = prompt.password("Password to set for #{user_add}: ", :verify => true, :lazy => false)
|
34
41
|
|
35
|
-
|
36
|
-
|
42
|
+
run "passwd #{user_add}" do |channel, stream, data|
|
43
|
+
logger.info data
|
37
44
|
|
38
|
-
|
39
|
-
|
40
|
-
|
45
|
+
if data =~ /password:/i
|
46
|
+
channel.send_data "#{new_password}\n"
|
47
|
+
channel.send_data "#{new_password}\n"
|
48
|
+
end
|
41
49
|
end
|
42
50
|
end
|
43
51
|
|
@@ -4,6 +4,12 @@ namespace :imagemagick do
|
|
4
4
|
desc <<-DESC
|
5
5
|
Install imagemagick.\n
|
6
6
|
*imagemagick_build_options*: Imagemagick build options.
|
7
|
+
<pre>
|
8
|
+
set :imagemagick_build_options, {
|
9
|
+
:url => "ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz",
|
10
|
+
:unpack_dir => "ImageMagick-*"
|
11
|
+
}
|
12
|
+
</pre>
|
7
13
|
DESC
|
8
14
|
task :install do
|
9
15
|
|
@@ -6,6 +6,12 @@ namespace :memcached do
|
|
6
6
|
Install memcached.
|
7
7
|
|
8
8
|
*memcached_build_options*: Memcached build options.\n
|
9
|
+
<pre>
|
10
|
+
set :memcached_build_options, {
|
11
|
+
:url => "http://www.danga.com/memcached/dist/memcached-1.2.4.tar.gz",
|
12
|
+
:configure_options => "--prefix=/usr/local"
|
13
|
+
}
|
14
|
+
</pre>\n
|
9
15
|
*memcached_memory*: Memcached memory (in MB).\n
|
10
16
|
@set :memcached_memory, 64@\n
|
11
17
|
*memcached_pid_path*: Path to memcached pid file. Defaults to /var/run/memcached.pid\n
|
@@ -1,40 +1,54 @@
|
|
1
|
-
namespace :
|
1
|
+
namespace :mongrel do
|
2
|
+
|
3
|
+
namespace :cluster do
|
2
4
|
|
3
|
-
|
5
|
+
namespace :centos do
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
+
desc <<-DESC
|
8
|
+
Create mongrel cluster.
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
10
|
+
*mongrel_size*: Number of mongrels.\n
|
11
|
+
@set :mongrel_size, 3@\n
|
12
|
+
*mongrel_port*: Starting port for mongrels. If there are 3 mongrels with port 9000,
|
13
|
+
then instances will be at 9000, 9001, and 9002\n
|
14
|
+
@set :mongrel_port, 9000@\n
|
15
|
+
*mongrel_config_dir*: Directory for mongrel config. _Defaults to "[shared_path]/config/mongrel"_
|
16
|
+
*mongrel_pid_dir*: Directory for mongrel pids. _Defaults to "[shared_path]/pids"
|
17
|
+
*mongrel_config_script*: Config script to load with mongrel. _Defaults to nil_\n
|
18
|
+
@set :mongrel_config_script, "config/mongrel_handler.rb"@\n
|
19
|
+
*mongrel_cluster_command*: Mongrel cluster command. _Defaults to mongrel_cluster_ctl_
|
20
|
+
*mongrel_initscript_name*: Mongrel initscript name. _Defaults to mongrel_cluster_\#{application}_
|
21
|
+
*mongrel_config_options*: Config options appended to cluster yml. _Defaults to <tt>{}</tt>_
|
22
|
+
DESC
|
23
|
+
task :setup do
|
19
24
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
25
|
+
# Settings
|
26
|
+
fetch(:mongrel_size)
|
27
|
+
fetch(:mongrel_port)
|
28
|
+
fetch_or_default(:mongrel_config_dir, "#{shared_path}/config/mongrel")
|
29
|
+
fetch_or_default(:mongrel_pid_dir, "#{shared_path}/pids")
|
30
|
+
fetch_or_default(:mongrel_config_script, nil)
|
31
|
+
|
32
|
+
fetch_or_default(:mongrel_cluster_command, "mongrel_cluster_ctl")
|
33
|
+
fetch_or_default(:mongrel_initscript_name, "mongrel_cluster_#{application}")
|
34
|
+
fetch_or_default(:mongrel_config_options, {})
|
35
|
+
|
36
|
+
unless mongrel_config_script.blank?
|
37
|
+
mongrel_config_options["config_script"] = mongrel_config_script
|
38
|
+
end
|
26
39
|
|
27
|
-
|
40
|
+
run "mkdir -p #{mongrel_config_dir}"
|
28
41
|
|
29
|
-
|
30
|
-
|
42
|
+
put template.load("mongrel/mongrel_cluster.initd.erb"), "/tmp/#{mongrel_initscript_name}.initd"
|
43
|
+
put template.load("mongrel/mongrel_cluster.yml.erb"), "#{mongrel_config_dir}/mongrel_cluster.yml"
|
31
44
|
|
32
|
-
|
33
|
-
|
45
|
+
# Setup the mongrel_cluster init script
|
46
|
+
sudo "install -o root /tmp/#{mongrel_initscript_name}.initd /etc/init.d/#{mongrel_initscript_name}"
|
34
47
|
|
35
|
-
|
36
|
-
|
48
|
+
sudo "/sbin/chkconfig --level 345 #{mongrel_initscript_name} on"
|
49
|
+
end
|
37
50
|
|
51
|
+
end
|
38
52
|
|
39
53
|
end
|
40
54
|
|
data/lib/recipes/centos/monit.rb
CHANGED
@@ -6,6 +6,7 @@ namespace :monit do
|
|
6
6
|
Install monit.
|
7
7
|
|
8
8
|
*monit_build_options*: Monit build options.\n
|
9
|
+
@set :monit_build_options, { :url => "http://www.tildeslash.com/monit/dist/monit-4.10.1.tar.gz" }@\n
|
9
10
|
*monit_port*: Monit port. _Defaults to 2812_\n
|
10
11
|
@set :monit_port, 2812@\n
|
11
12
|
*monit_password*: Monit password. _Defaults to password prompt_\n
|
@@ -19,7 +20,7 @@ namespace :monit do
|
|
19
20
|
|
20
21
|
# Settings
|
21
22
|
fetch_or_default(:monit_port, 2812)
|
22
|
-
fetch_or_default(:monit_password, prompt.password('Monit admin password (to set): ', true))
|
23
|
+
fetch_or_default(:monit_password, prompt.password('Monit admin password (to set): ', :verify => true))
|
23
24
|
fetch_or_default(:monit_conf_dir, "/etc/monit")
|
24
25
|
fetch_or_default(:monit_pid_path, "/var/run/monit.pid")
|
25
26
|
fetch(:monit_build_options)
|
data/lib/recipes/centos/mysql.rb
CHANGED
@@ -11,7 +11,7 @@ namespace :mysql do
|
|
11
11
|
task :install do
|
12
12
|
|
13
13
|
# Settings
|
14
|
-
fetch_or_default(:mysql_admin_password_set, prompt.password('Mysql admin password (to set): ', true))
|
14
|
+
fetch_or_default(:mysql_admin_password_set, prompt.password('Mysql admin password (to set): ', :verify => true))
|
15
15
|
|
16
16
|
# Install through package manager
|
17
17
|
yum.install([ "mysql", "mysql-devel", "mysql-server" ])
|
data/lib/recipes/centos/nginx.rb
CHANGED
@@ -6,6 +6,14 @@ namespace :nginx do
|
|
6
6
|
Install nginx, conf, initscript, nginx user and service.
|
7
7
|
|
8
8
|
*nginx_build_options*: Nginx build options.\n
|
9
|
+
<pre>
|
10
|
+
set :nginx_build_options, {
|
11
|
+
:url => "http://sysoev.ru/nginx/nginx-0.5.35.tar.gz",
|
12
|
+
:configure_options => "--sbin-path=\#{nginx_bin_path} --conf-path=\#{nginx_conf_path}
|
13
|
+
--pid-path=\#{nginx_pid_path} --error-log-path=/var/log/nginx_master_error.log --lock-path=/var/lock/nginx
|
14
|
+
--prefix=\#{nginx_prefix_path} --with-md5=auto/lib/md5 --with-sha1=auto/lib/sha1 --with-http_ssl_module"
|
15
|
+
}
|
16
|
+
</pre>\n
|
9
17
|
*nginx_bin_path*: Nginx sbin path. _Defaults to /sbin/nginx_\n
|
10
18
|
@set :nginx_bin_path, "/sbin/nginx"@\n
|
11
19
|
*nginx_conf_path*: Path to nginx conf. _Defaults to /etc/nginx/nginx.conf_\n
|
data/lib/recipes/centos/ruby.rb
CHANGED
@@ -7,6 +7,14 @@ namespace :ruby do
|
|
7
7
|
|
8
8
|
*ruby_build_options*: Ruby build options.\n
|
9
9
|
*rubygems_build_options*: Rubygems build options.\n
|
10
|
+
<pre>
|
11
|
+
set :ruby_build_options, {
|
12
|
+
:url => "http://capitate.s3.amazonaws.com/ruby-1.8.6-p110.tar.gz",
|
13
|
+
:build_dest => "/usr/src",
|
14
|
+
:configure_options => "--prefix=/usr",
|
15
|
+
:clean => false
|
16
|
+
}
|
17
|
+
</pre>
|
10
18
|
DESC
|
11
19
|
task :install do
|
12
20
|
|
@@ -15,14 +23,14 @@ namespace :ruby do
|
|
15
23
|
fetch(:rubygems_build_options)
|
16
24
|
|
17
25
|
# Install dependencies
|
18
|
-
yum.install([ "zlib", "zlib-devel" ])
|
26
|
+
yum.install([ "zlib", "zlib-devel", "readline-devel" ])
|
19
27
|
|
20
28
|
# Install ruby 1.8.6
|
21
29
|
script.make_install("ruby", ruby_build_options)
|
22
30
|
|
23
31
|
# Install rubygems
|
24
32
|
script.install("rubygems", rubygems_build_options) do |dir|
|
25
|
-
run_via "
|
33
|
+
run_via "cd #{dir} && ruby setup.rb > install.log", { :shell => true }
|
26
34
|
end
|
27
35
|
|
28
36
|
end
|
@@ -4,7 +4,14 @@ namespace :sphinx do
|
|
4
4
|
|
5
5
|
desc <<-DESC
|
6
6
|
Install sphinx.\n
|
7
|
-
*sphinx_build_options*: Sphinx build options.\n
|
7
|
+
*sphinx_build_options*: Sphinx build options.\n
|
8
|
+
<pre>
|
9
|
+
set :sphinx_build_options, {
|
10
|
+
:url => "http://www.sphinxsearch.com/downloads/sphinx-0.9.7.tar.gz",
|
11
|
+
:configure_options => "--with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib/mysql
|
12
|
+
--prefix=\#{sphinx_prefix}"
|
13
|
+
}
|
14
|
+
</pre>\n
|
8
15
|
*sphinx_prefix*: Sphinx install prefix. _Defaults to "/usr/local/sphinx"_\n
|
9
16
|
DESC
|
10
17
|
task :install do
|
data/lib/recipes/memcached.rb
CHANGED
@@ -1,30 +1,28 @@
|
|
1
1
|
namespace :memcached do
|
2
2
|
|
3
|
-
|
4
|
-
Generate and install memcached monitrc.
|
3
|
+
namespace :monit do
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
5
|
+
desc <<-DESC
|
6
|
+
Generate and install memcached monitrc.
|
7
|
+
|
8
|
+
*memcached_pid_path*: Path to memcached pid file. _Defaults to /var/run/memcached.pid_\n
|
9
|
+
@set :memcached_pid_path, "/var/run/memcached.pid"@\n
|
10
|
+
*memcached_port*: Memcached port. _Defaults to 11211_\n
|
11
|
+
@set :memcached_port, 11211@\n
|
12
|
+
*monit_conf_dir*: Destination for monitrc. _Defaults to "/etc/monit"_\n
|
13
|
+
@set :monit_conf_dir, "/etc/monit"@\n
|
14
|
+
DESC
|
15
|
+
task :install do
|
16
|
+
|
17
|
+
# Settings
|
18
|
+
fetch_or_default(:memcached_pid_path, "/var/run/memcached.pid")
|
19
|
+
fetch_or_default(:memcached_port, 11211)
|
20
|
+
fetch_or_default(:monit_conf_dir, "/etc/monit")
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
fetch_or_default(:monit_conf_dir, "/etc/monit")
|
22
|
+
put template.load("memcached/memcached.monitrc.erb"), "/tmp/memcached.monitrc"
|
23
|
+
run_via "install -o root /tmp/memcached.monitrc #{monit_conf_dir}/memcached.monitrc"
|
24
|
+
end
|
25
25
|
|
26
|
-
put template.load("memcached/memcached.monitrc.erb"), "/tmp/memcached.monitrc"
|
27
|
-
run_via "install -o root /tmp/memcached.monitrc #{monit_conf_dir}/memcached.monitrc"
|
28
26
|
end
|
29
27
|
|
30
28
|
end
|
@@ -1,63 +1,73 @@
|
|
1
1
|
# Create init script
|
2
|
-
namespace :
|
2
|
+
namespace :mongrel do
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
namespace :cluster do
|
5
|
+
|
6
|
+
namespace :monit do
|
7
|
+
|
8
|
+
desc <<-DESC
|
9
|
+
Create monit configuration for mongrel cluster.
|
6
10
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
11
|
+
*mongrel_application*: Name of application (monit group). _Defaults to <tt>"mongrel_cluster_\#{fetch(:application)}"</tt>_
|
12
|
+
*mongrel_size*: Number of mongrels.\n
|
13
|
+
@set :mongrel_size, 3@\n
|
14
|
+
*mongrel_port*: Starting port for mongrels. If there are 3 mongrels with port 9000, then instances
|
15
|
+
will be at 9000, 9001, and 9002\n
|
16
|
+
@set :mongrel_port, 9000@\n
|
17
|
+
*mongrel_config_script*: Config script to load with mongrel. _Defaults to nil_\n
|
18
|
+
@set :mongrel_config_script, "config/mongrel_handler.rb"@\n
|
19
|
+
*monit_conf_dir*: Destination for monitrc. _Defaults to "/etc/monit"_\n
|
20
|
+
@set :monit_conf_dir, "/etc/monit"@\n
|
21
|
+
DESC
|
22
|
+
task :setup do
|
23
|
+
|
24
|
+
# See http://www.igvita.com/2006/11/07/monit-makes-mongrel-play-nice/
|
25
|
+
|
26
|
+
# TODO: For depends on memcached setting
|
27
|
+
# See http://blog.labratz.net/articles/2007/5/1/monit-for-your-uptime
|
28
|
+
|
29
|
+
# Settings
|
30
|
+
fetch(:mongrel_size)
|
31
|
+
fetch(:mongrel_port)
|
32
|
+
fetch_or_default(:mongrel_application, Proc.new { "mongrel_cluster_#{fetch(:application)}" })
|
33
|
+
fetch_or_default(:mongrel_config_script, nil)
|
34
|
+
fetch_or_default(:monit_conf_dir, "/etc/monit")
|
35
|
+
|
36
|
+
processes = []
|
37
|
+
ports = (0...mongrel_size).collect { |i| mongrel_port + i }
|
38
|
+
ports.each do |port|
|
33
39
|
|
34
|
-
|
40
|
+
pid_path = "#{shared_path}/pids/mongrel.#{port}.pid"
|
35
41
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
default_options = [
|
43
|
+
[ "-d" ],
|
44
|
+
[ "-e", "production" ],
|
45
|
+
[ "-a", "127.0.0.1" ],
|
46
|
+
[ "-c", current_path ],
|
47
|
+
[ "--user", user ],
|
48
|
+
[ "--group", user ],
|
49
|
+
[ "-p", port ],
|
50
|
+
[ "-P", pid_path ],
|
51
|
+
[ "-l", "log/mongrel.#{port}.log" ]
|
52
|
+
]
|
47
53
|
|
48
|
-
|
54
|
+
default_options << [ "-S", mongrel_config_script ] if mongrel_config_script
|
49
55
|
|
50
|
-
|
51
|
-
|
52
|
-
|
56
|
+
start_options = default_options.collect { |a| a.join(" ") }.join(" ")
|
57
|
+
#start_options = "-d -e production -a 127.0.0.1 -c #{current_path} --user #{user} --group #{user} -p #{port} -P #{pid_path} -l log/mongrel.#{port}.log"
|
58
|
+
stop_options = "-p #{port} -P #{pid_path}"
|
53
59
|
|
54
|
-
|
55
|
-
|
60
|
+
processes << { :port => port, :start_options => start_options, :stop_options => stop_options, :name => "/usr/bin/mongrel_rails", :pid_path => pid_path }
|
61
|
+
end
|
62
|
+
|
63
|
+
set :processes, processes
|
56
64
|
|
57
|
-
|
65
|
+
put template.load("mongrel/mongrel_cluster.monitrc.erb"), "/tmp/#{mongrel_application}.monitrc"
|
66
|
+
sudo "install -o root /tmp/#{mongrel_application}.monitrc #{monit_conf_dir}/#{mongrel_application}.monitrc"
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
58
70
|
|
59
|
-
put template.load("mongrel/mongrel_cluster.monitrc.erb"), "/tmp/mongrel_cluster_#{application}.monitrc"
|
60
|
-
sudo "install -o root /tmp/mongrel_cluster_#{application}.monitrc #{monit_conf_dir}/mongrel_cluster_#{application}.monitrc"
|
61
71
|
end
|
62
72
|
|
63
73
|
end
|