sml-rubber 0.9.9 → 0.9.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/VERSION +1 -1
  2. data/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +13 -7
  3. data/generators/vulcanize/templates/apache/config/rubber/role/{web → apache}/deflate.conf +0 -0
  4. data/generators/vulcanize/templates/apache/config/rubber/role/{web → apache}/expires.conf +0 -0
  5. data/generators/vulcanize/templates/apache/config/rubber/role/{web → apache}/headers.conf +0 -0
  6. data/generators/vulcanize/templates/apache/config/rubber/role/apache/monit-apache.conf +8 -0
  7. data/generators/vulcanize/templates/apache/config/rubber/role/apache/ports.conf +5 -0
  8. data/generators/vulcanize/templates/apache/config/rubber/role/{web → apache}/setenvif.conf +0 -0
  9. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +62 -0
  10. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache.auth +7 -0
  11. data/generators/vulcanize/templates/{nginx/config/rubber/role/web_tools/index.html → apache/config/rubber/role/web_tools/tools-index.html} +8 -1
  12. data/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +4 -12
  13. data/generators/vulcanize/templates/base/config/deploy.rb +5 -34
  14. data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +4 -6
  15. data/generators/vulcanize/templates/base/config/rubber/rubber.yml +29 -3
  16. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +23 -0
  17. data/generators/vulcanize/templates/{nginx/config/rubber/role/web/nginx.conf → complete_mongrel_mysql/config/rubber/role/nginx/nginx-mongrel.conf} +25 -45
  18. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/rubber-complete.yml +41 -0
  19. data/generators/vulcanize/templates/{complete_mysql → complete_mongrel_mysql}/templates.yml +0 -0
  20. data/generators/vulcanize/templates/complete_passenger_mysql/config/rubber/role/haproxy/haproxy-passenger.conf +19 -0
  21. data/generators/vulcanize/templates/complete_passenger_mysql/config/rubber/rubber-complete.yml +40 -0
  22. data/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +3 -1
  23. data/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +8 -10
  24. data/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +1 -1
  25. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-base.conf +26 -0
  26. data/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +1 -1
  27. data/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +0 -5
  28. data/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +7 -7
  29. data/generators/vulcanize/templates/mongrel/config/rubber/role/{app → mongrel}/mongrel_cluster.yml +4 -4
  30. data/generators/vulcanize/templates/mongrel/config/rubber/role/{app → mongrel}/monit-mongrel.conf +2 -2
  31. data/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +2 -2
  32. data/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +1 -1
  33. data/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +17 -1
  34. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +1 -1
  35. data/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +1 -1
  36. data/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +14 -36
  37. data/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +1 -1
  38. data/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +8 -0
  39. data/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +7 -7
  40. data/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +6 -6
  41. data/generators/vulcanize/templates/nginx/config/rubber/role/{web → nginx}/crontab +0 -0
  42. data/generators/vulcanize/templates/nginx/config/rubber/role/{web → nginx}/monit-nginx.conf +0 -1
  43. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/nginx.conf +42 -0
  44. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +43 -62
  45. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-index.html +30 -0
  46. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-nginx.auth +7 -0
  47. data/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +3 -26
  48. data/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +13 -40
  49. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +6 -0
  50. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
  51. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +46 -0
  52. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +10 -0
  53. data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +9 -11
  54. data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +1 -1
  55. data/lib/rubber/cloud/aws.rb +30 -0
  56. data/lib/rubber/instance.rb +53 -2
  57. data/lib/rubber/recipes/rubber.rb +7 -6
  58. data/lib/rubber/recipes/rubber/deploy.rb +22 -1
  59. data/lib/rubber/recipes/rubber/instances.rb +74 -24
  60. data/lib/rubber/recipes/rubber/load_balancers.rb +27 -0
  61. data/lib/rubber/recipes/rubber/security_groups.rb +5 -7
  62. data/lib/rubber/recipes/rubber/setup.rb +50 -14
  63. data/lib/rubber/recipes/rubber/static_ips.rb +7 -7
  64. data/lib/rubber/recipes/rubber/utils.rb +6 -7
  65. data/lib/rubber/recipes/rubber/volumes.rb +8 -8
  66. data/lib/rubber/util.rb +4 -0
  67. data/test/instance_test.rb +55 -0
  68. metadata +32 -18
  69. data/generators/vulcanize/templates/apache/config/rubber/role/web/vhost.conf +0 -27
  70. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy.conf +0 -44
  71. data/generators/vulcanize/templates/passenger/config/rubber/role/web/passenger.conf +0 -8
  72. data/generators/vulcanize/templates/passenger/config/rubber/role/web/vhost.conf +0 -29
@@ -4,7 +4,7 @@
4
4
 
5
5
  check process mysql with pidfile /var/run/mysqld/mysqld.pid
6
6
  group mysql-<%= RUBBER_ENV %>
7
- start program = "/etc/init.d/mysql start"
7
+ start program = "/etc/init.d/mysql restart"
8
8
  stop program = "/etc/init.d/mysql stop"
9
9
  if failed host 127.0.0.1 port 3306 protocol mysql then alert
10
10
  if 5 restarts within 5 cycles then timeout
@@ -23,6 +23,14 @@ db_root_dir: /mnt/mysql
23
23
  db_data_dir: "#{db_root_dir}/data"
24
24
  db_log_dir: "#{db_root_dir}/log"
25
25
 
26
+ # Capistrano needs db:primary role for migrate to work,
27
+ # so we might as well just make consistent across the board
28
+ role_dependencies:
29
+ mysql_master: [db:primary=true]
30
+ mysql_slave: [db]
31
+ db:primary=true: [mysql_master]
32
+ db: [mysql_slave]
33
+
26
34
  packages: [mysql-client, libmysql-ruby]
27
35
 
28
36
  roles:
@@ -9,17 +9,17 @@ namespace :rubber do
9
9
 
10
10
  # Capistrano needs db:primary role for migrate to work
11
11
  task :set_db_role do
12
- sql_instances = rubber_cfg.instance.for_role("mysql_sql")
12
+ sql_instances = rubber_instances.for_role("mysql_sql")
13
13
  sql_instances.each do |instance|
14
14
  if ! instance.role_names.find {|n| n == 'db'}
15
15
  role = Rubber::Configuration::RoleItem.new('db')
16
- primary_exists = rubber_cfg.instance.for_role("db", "primary" => true).size > 0
16
+ primary_exists = rubber_instances.for_role("db", "primary" => true).size > 0
17
17
  role.options["primary"] = true unless primary_exists
18
18
  instance.roles << role
19
19
  end
20
20
  end
21
- rubber_cfg.instance.save()
22
- load_roles() unless rubber_cfg.environment.bind().disable_auto_roles
21
+ rubber_instances.save()
22
+ load_roles() unless rubber_env.disable_auto_roles
23
23
  end
24
24
 
25
25
  before "rubber:install_packages", "rubber:mysql_cluster:install"
@@ -56,7 +56,7 @@ namespace :rubber do
56
56
  # Conditionaly bootstrap for each node/role only if that node has not
57
57
  # been boostrapped for that role before
58
58
 
59
- rubber_cfg.instance.for_role("mysql_mgm").each do |ic|
59
+ rubber_instances.for_role("mysql_mgm").each do |ic|
60
60
  task_name = "_bootstrap_mysql_mgm_#{ic.full_name}".to_sym()
61
61
  task task_name, :hosts => ic.full_name do
62
62
  exists = capture("if grep -c rubber.*mysql_mgm /etc/mysql/ndb_mgmd.cnf &> /dev/null; then echo exists; fi")
@@ -68,7 +68,7 @@ namespace :rubber do
68
68
  send task_name
69
69
  end
70
70
 
71
- rubber_cfg.instance.for_role("mysql_data").each do |ic|
71
+ rubber_instances.for_role("mysql_data").each do |ic|
72
72
  task_name = "_bootstrap_mysql_data_#{ic.full_name}".to_sym()
73
73
  task task_name, :hosts => ic.full_name do
74
74
  exists = capture("if grep -c rubber.*mysql_data /etc/mysql/my.cnf &> /dev/null; then echo exists; fi")
@@ -80,7 +80,7 @@ namespace :rubber do
80
80
  send task_name
81
81
  end
82
82
 
83
- rubber_cfg.instance.for_role("mysql_sql").each do |ic|
83
+ rubber_instances.for_role("mysql_sql").each do |ic|
84
84
  task_name = "_bootstrap_mysql_sql_#{ic.full_name}".to_sym()
85
85
  task task_name, :hosts => ic.full_name do
86
86
  exists = capture("if grep -c rubber.*mysql_sql /etc/mysql/my.cnf &> /dev/null; then echo exists; fi")
@@ -8,10 +8,10 @@ namespace :rubber do
8
8
  # serial_task can only be called after roles defined - not normally a problem, but
9
9
  # rubber auto-roles don't get defined till after all tasks are defined
10
10
  on :load do
11
- rubber.serial_task self, :serial_restart, :roles => [:web, :web_tools] do
11
+ rubber.serial_task self, :serial_restart, :roles => :nginx do
12
12
  run "/etc/init.d/nginx restart"
13
13
  end
14
- rubber.serial_task self, :serial_reload, :roles => [:web, :web_tools] do
14
+ rubber.serial_task self, :serial_reload, :roles => :nginx do
15
15
  run "if ! ps ax | grep -v grep | grep -c nginx &> /dev/null; then /etc/init.d/nginx start; else /etc/init.d/nginx reload; fi"
16
16
  end
17
17
  end
@@ -21,22 +21,22 @@ namespace :rubber do
21
21
  after "deploy:restart", "rubber:nginx:reload"
22
22
 
23
23
  desc "Stops the nginx web server"
24
- task :stop, :roles => [:web, :web_tools], :on_error => :continue do
24
+ task :stop, :roles => :nginx, :on_error => :continue do
25
25
  run "/etc/init.d/nginx stop"
26
26
  end
27
27
 
28
28
  desc "Starts the nginx web server"
29
- task :start, :roles => [:web, :web_tools] do
29
+ task :start, :roles => :nginx do
30
30
  run "/etc/init.d/nginx start"
31
31
  end
32
32
 
33
33
  desc "Restarts the nginx web server"
34
- task :restart, :roles => [:web, :web_tools] do
34
+ task :restart, :roles => :nginx do
35
35
  serial_restart
36
36
  end
37
37
 
38
38
  desc "Reloads the nginx web server"
39
- task :reload, :roles => [:web, :web_tools] do
39
+ task :reload, :roles => :nginx do
40
40
  serial_reload
41
41
  end
42
42
 
@@ -6,4 +6,3 @@ check process nginx with pidfile <%= PIDFILE %>
6
6
  group nginx-<%= RUBBER_ENV %>
7
7
  start program = "/etc/init.d/nginx start"
8
8
  stop program = "/etc/init.d/nginx stop"
9
- if failed host <%= rubber_env.host %> port 80 protocol http and request "/robots.txt" with timeout 10 seconds for 10 cycles then restart
@@ -0,0 +1,42 @@
1
+ <%
2
+ @path = "/etc/nginx/nginx.conf"
3
+ @post = "mkdir -p /mnt/nginx/logs"
4
+ %>
5
+
6
+ user www-data;
7
+ worker_processes 10;
8
+
9
+ pid /var/run/nginx.pid;
10
+
11
+ events
12
+ {
13
+ worker_connections 1024;
14
+ }
15
+
16
+ http
17
+ {
18
+ include /etc/nginx/mime.types;
19
+ default_type application/octet-stream;
20
+
21
+ sendfile on;
22
+ tcp_nopush on;
23
+ tcp_nodelay off;
24
+
25
+ gzip on;
26
+ gzip_http_version 1.0;
27
+ gzip_comp_level 2;
28
+ gzip_proxied any;
29
+ gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
30
+
31
+ # configure log format like to Apache's "combined" log format
32
+ log_format main
33
+ '$remote_addr - $remote_user [$time_local] '
34
+ '"$request" $status $body_bytes_sent "$http_referer" '
35
+ '"$http_user_agent" "$http_cookie"';
36
+
37
+ # default log files
38
+ error_log /mnt/nginx/logs/error.log notice;
39
+ access_log /mnt/nginx/logs/access.log main;
40
+
41
+ include /etc/nginx/rubber/*.conf;
42
+ }
@@ -1,74 +1,55 @@
1
1
  <%
2
- @path = "/etc/nginx/nginx.conf"
3
-
4
- also_web = rubber_instances[rubber_env.host].role_names.include?('web') rescue false
5
- # Only want to be additive if we are running web server on same host as tools
6
- if also_web
7
- @additive = ["# rubber-web_tools-start", "# rubber-web_tools-end"]
8
- end
2
+ @path = "/etc/nginx/rubber/tools.conf"
9
3
  %>
10
4
 
11
- <%# only need this section if running without nginx configured for site %>
12
- <% if ! also_web %>
13
5
 
14
- user www-data;
15
- worker_processes 1;
16
-
17
- error_log /var/log/nginx/error.log;
18
- pid /var/run/nginx.pid;
19
-
20
- events
21
- {
22
- worker_connections 1024;
23
- }
24
-
25
- <% end %>
6
+ # This server is setup to serve http.
7
+ server
8
+ {
9
+ listen <%= rubber_env.web_tools_port %>;
10
+ server_name <%= rubber_env.full_host %>;
11
+ root /var/www;
26
12
 
27
- http
13
+ rewrite (.*) https://$host:<%= rubber_env.web_tools_ssl_port %>$1 break;
14
+ }
15
+
16
+ # This server is setup to serve https.
17
+ server
28
18
  {
29
- include /etc/nginx/mime.types;
30
- default_type application/octet-stream;
31
-
32
- access_log /var/log/nginx/access.log;
33
-
34
- sendfile on;
35
-
36
- keepalive_timeout 65;
37
- tcp_nodelay on;
38
-
39
- gzip on;
19
+ listen <%= rubber_env.web_tools_ssl_port %>;
20
+ server_name <%= rubber_env.full_host %>;
21
+
22
+ ssl on;
23
+ ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
24
+ ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
25
+ # ssl_certificate <%= RUBBER_ROOT %>/config/snapmylife.com.crt;
26
+ # ssl_certificate_key <%= RUBBER_ROOT %>/config/snapmylife.com.key;
27
+
28
+ auth_basic "Rubber Admin Tools";
29
+ auth_basic_user_file <%= RUBBER_ROOT %>/config/<%= rubber_env.app_name %>.auth;
40
30
 
41
- # This server is setup to serve www.
42
- server
31
+ client_max_body_size 10M;
32
+ root /var/www;
33
+
34
+
35
+ location /
43
36
  {
44
- listen <%= rubber_env.web_tools_port %>;
45
- client_max_body_size 10M;
46
-
47
- server_name <%= rubber_env.full_host %>;
48
-
49
- root /var/www;
50
-
51
-
52
- location /
37
+ # If the file exists as a static file serve it directly without
38
+ # running all the other rewrite tests on it
39
+ if (-f $request_filename)
40
+ {
41
+ break;
42
+ }
43
+
44
+ # check for index.html for directory index
45
+ # if its there on the filesystem then rewite
46
+ # the url to add /index.html to the end of it
47
+ # and then break to send it to the next config rules.
48
+ if (-f $request_filename/index.html)
53
49
  {
54
- # If the file exists as a static file serve it directly without
55
- # running all the other rewrite tests on it
56
- if (-f $request_filename)
57
- {
58
- break;
59
- }
60
-
61
- # check for index.html for directory index
62
- # if its there on the filesystem then rewite
63
- # the url to add /index.html to the end of it
64
- # and then break to send it to the next config rules.
65
- if (-f $request_filename/index.html)
66
- {
67
- rewrite (.*) $1/index.html break;
68
- }
50
+ rewrite (.*) $1/index.html break;
69
51
  }
70
-
71
- include /etc/nginx/rubber/*.conf;
72
52
  }
73
-
53
+
54
+ include /etc/nginx/rubber/tools/*.conf;
74
55
  }
@@ -0,0 +1,30 @@
1
+ <%
2
+ @path = "/var/www/index.html"
3
+ %>
4
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
5
+ <html>
6
+ <head>
7
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
8
+ <title>Rubber Admin Tools</title>
9
+ </head>
10
+ <body>
11
+ <h1>Rubber Admin Tools</h1>
12
+ <ul>
13
+
14
+ <li><a href="/munin/">Munin</a></li>
15
+
16
+ <% if cruise_host = rubber_instances.for_role('cruise').first %>
17
+ <li><a href="http://<%= cruise_host %>/cruise/">CruiseControl</a></li>
18
+ <% end %>
19
+
20
+ <% rubber_instances.for_role('haproxy').each do |ic| %>
21
+ <li><a href="/haproxy_<%= ic.name %>/">HAProxy <%= ic.name %></a></li>
22
+ <% end %>
23
+
24
+ <% rubber_instances.each do |ic| %>
25
+ <li><a href="/monit_<%= ic.name %>/">Monit <%= ic.name %></a></li>
26
+ <% end %>
27
+
28
+ </ul>
29
+ </body>
30
+ </html>
@@ -0,0 +1,7 @@
1
+ <%
2
+ @path = "#{RUBBER_ROOT}/config/#{rubber_env.app_name}.auth"
3
+ user = rubber_env.web_tools_user || 'admin'
4
+ pass = rubber_env.web_tools_password || rand(1000000000).to_s
5
+ %>
6
+
7
+ <%= user %>:<%= pass.crypt(sprintf('%02d', rand(100)))%>
@@ -2,32 +2,9 @@
2
2
  # Uses from base rubber config
3
3
  # domain: foo.com
4
4
 
5
- # Uses from appserver (mongrel) rubber config
6
- # appserver_base_port: 8000
7
- # appserver_count: 8
8
-
9
- web_tools_port: 8080
10
-
11
- security_groups:
12
- web:
13
- description: To open up port 80 for http server on web role
14
- rules:
15
- - protocol: tcp
16
- from_port: 80
17
- to_port: 80
18
- source_ips: [0.0.0.0/0]
19
- web_tools:
20
- description: "To open up port #{web_tools_port} for internal/tools http server"
21
- rules:
22
- - protocol: tcp
23
- from_port: "#{web_tools_port}"
24
- to_port: "#{web_tools_port}"
25
- source_ips: [0.0.0.0/0]
5
+ # Uses from rubber-complete.yml
6
+ # web_tools_port: 8080
26
7
 
27
8
  roles:
28
- web:
29
- packages: [nginx]
30
- assigned_security_groups: [web]
31
- web_tools:
9
+ nginx:
32
10
  packages: [nginx]
33
- assigned_security_groups: [web_tools]
@@ -7,57 +7,30 @@ namespace :rubber do
7
7
 
8
8
  after "rubber:install_gems", "rubber:passenger:custom_install"
9
9
 
10
- task :custom_install, :roles => :web do
10
+ task :custom_install, :roles => :passenger do
11
11
  rubber.sudo_script 'install_passenger', <<-ENDSCRIPT
12
- if [[ ! -f /usr/lib/ruby/gems/*/gems/passenger-*/ext/apache2/mod_passenger.so ]]; then
12
+ if [[ -z `ls /usr/lib/ruby/gems/*/gems/passenger-*/ext/apache2/mod_passenger.so 2> /dev/null` ]]; then
13
13
  echo -en "\n\n\n\n" | passenger-install-apache2-module
14
- # disable ubuntu default site
15
- a2dissite default
16
14
  fi
17
15
  ENDSCRIPT
18
- end
19
-
20
- # serial_task can only be called after roles defined - not normally a problem, but
21
- # rubber auto-roles don't get defined till after all tasks are defined
22
- on :load do
23
- rubber.serial_task self, :serial_restart, :roles => :web do
24
- run "/etc/init.d/apache2 restart"
25
- end
26
- rubber.serial_task self, :serial_reload, :roles => :web do
27
- run "if ! ps ax | grep -v grep | grep -c apache2 &> /dev/null; then /etc/init.d/apache2 start; else /etc/init.d/apache2 reload; fi"
28
- end
29
- end
30
-
31
- desc "Stops the apache web server"
32
- task :stop, :roles => :web, :on_error => :continue do
33
- run "/etc/init.d/apache2 stop"
34
16
  end
35
-
36
- desc "Starts the apache web server"
37
- task :start, :roles => :web do
38
- run "/etc/init.d/apache2 start"
39
- end
40
-
41
- desc "Restarts the apache web server"
42
- task :restart, :roles => :web do
43
- serial_restart
44
- end
45
-
46
- desc "Reloads the apache web server"
47
- task :reload, :roles => :web do
48
- serial_reload
17
+
18
+ after "rubber:setup_app_permissions", "rubber:passenger:setup_passenger_permissions"
19
+
20
+ task :setup_passenger_permissions, :roles => :passenger do
21
+ run "chown #{rubber_env.app_user}:#{rubber_env.app_user} #{current_path}/config/environment.rb"
49
22
  end
23
+
24
+ # passenger depends on apache for start/stop/restart, just need these defined
25
+ # as apache hooks into standard deploy lifecycle
50
26
 
51
- deploy.task :restart, :roles => :web do
52
- rubber.passenger.restart
27
+ deploy.task :restart, :roles => :app do
53
28
  end
54
29
 
55
- deploy.task :stop, :roles => :web do
56
- rubber.passenger.stop
30
+ deploy.task :stop, :roles => :app do
57
31
  end
58
32
 
59
- deploy.task :start, :roles => :web do
60
- rubber.passenger.start
33
+ deploy.task :start, :roles => :app do
61
34
  end
62
35
 
63
36
  end
@@ -0,0 +1,6 @@
1
+ <%
2
+ @path = '/etc/sudoers'
3
+ @additive = ["# munin passenger start", "# munin passenger end"]
4
+ %>
5
+
6
+ nobody ALL=(ALL) NOPASSWD: /usr/bin/passenger-status
@@ -0,0 +1,47 @@
1
+ <%
2
+ @path = "/etc/munin/plugins/passenger_status"
3
+ @perms = 0755
4
+ %>#!/usr/bin/env ruby
5
+
6
+ # from http://gist.github.com/21328
7
+ # by Dan Manges, http://www.dcmanges.com/blog/rails-application-visualization-with-munin
8
+
9
+ def output_config
10
+ puts <<-END
11
+ graph_category App
12
+ graph_title passenger status
13
+ graph_vlabel count
14
+
15
+ sessions.label sessions
16
+ max.label max processes
17
+ running.label running processes
18
+ active.label active processes
19
+ END
20
+ exit 0
21
+ end
22
+
23
+ def output_values
24
+ status = `sudo /usr/bin/passenger-status`
25
+ unless $?.success?
26
+ $stderr.puts "failed executing passenger-status"
27
+ exit 1
28
+ end
29
+ status =~ /max\s+=\s+(\d+)/
30
+ puts "max.value #{$1}"
31
+
32
+ status =~ /count\s+=\s+(\d+)/
33
+ puts "running.value #{$1}"
34
+
35
+ status =~ /active\s+=\s+(\d+)/
36
+ puts "active.value #{$1}"
37
+
38
+ total_sessions = 0
39
+ status.scan(/Sessions: (\d+)/).flatten.each { |count| total_sessions += count.to_i }
40
+ puts "sessions.value #{total_sessions}"
41
+ end
42
+
43
+ if ARGV[0] == "config"
44
+ output_config
45
+ else
46
+ output_values
47
+ end