capitate 0.2.3 → 0.2.5
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/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
|