capitate 0.1.9 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. data/Capfile +3 -2
  2. data/History.txt +6 -0
  3. data/Manifest.txt +28 -11
  4. data/bin/capitate +13 -61
  5. data/config/hoe.rb +2 -2
  6. data/docs/nginx.README +12 -0
  7. data/docs/recipes/centos.txt +33 -0
  8. data/docs/recipes/deploy-pending.txt +25 -0
  9. data/docs/recipes/deploy-web.txt +33 -0
  10. data/docs/recipes/deploy.txt +159 -0
  11. data/docs/recipes/docs.txt +26 -0
  12. data/docs/recipes/imagemagick-centos.txt +20 -0
  13. data/docs/recipes/imagemagick.txt +8 -0
  14. data/docs/recipes/index.txt +26 -0
  15. data/docs/recipes/memcached-centos.txt +32 -0
  16. data/docs/recipes/memcached.txt +35 -0
  17. data/docs/recipes/mongrel_cluster-centos.txt +27 -0
  18. data/docs/recipes/mongrel_cluster.txt +40 -0
  19. data/docs/recipes/monit-centos.txt +32 -0
  20. data/docs/recipes/monit.txt +8 -0
  21. data/docs/recipes/mysql-centos.txt +22 -0
  22. data/docs/recipes/mysql.txt +58 -0
  23. data/docs/recipes/nginx-centos.txt +43 -0
  24. data/docs/recipes/nginx.txt +51 -0
  25. data/docs/recipes/rails.txt +58 -0
  26. data/docs/recipes/ruby-centos.txt +22 -0
  27. data/docs/recipes/ruby.txt +8 -0
  28. data/docs/recipes/sphinx-centos.txt +35 -0
  29. data/docs/recipes/sphinx.txt +89 -0
  30. data/lib/capitate/cap_ext/run_via.rb +14 -0
  31. data/lib/capitate/plugins/gem.rb +2 -3
  32. data/lib/capitate/plugins/prompt.rb +24 -0
  33. data/lib/capitate/plugins/script.rb +29 -15
  34. data/lib/capitate/plugins/templates.rb +45 -40
  35. data/lib/capitate/plugins/yum.rb +12 -22
  36. data/lib/capitate/task_node.rb +28 -9
  37. data/lib/capitate/version.rb +2 -2
  38. data/lib/capitate.rb +4 -5
  39. data/lib/deployment/deploy.rb +42 -0
  40. data/lib/deployment/install-centos-rubyweb.rb +131 -0
  41. data/lib/recipes/centos/centos.rb +30 -21
  42. data/lib/recipes/centos/imagemagick.rb +9 -8
  43. data/lib/recipes/centos/memcached.rb +11 -21
  44. data/lib/recipes/centos/mongrel_cluster.rb +7 -11
  45. data/lib/recipes/centos/monit.rb +13 -18
  46. data/lib/recipes/centos/mysql.rb +6 -9
  47. data/lib/recipes/centos/nginx.rb +17 -30
  48. data/lib/recipes/centos/ruby.rb +14 -19
  49. data/lib/recipes/centos/sphinx.rb +14 -28
  50. data/lib/recipes/docs.rb +22 -6
  51. data/lib/recipes/memcached.rb +14 -8
  52. data/lib/recipes/mongrel_cluster.rb +11 -14
  53. data/lib/recipes/mysql.rb +22 -40
  54. data/lib/recipes/nginx.rb +9 -4
  55. data/lib/recipes/rails.rb +53 -6
  56. data/lib/recipes/sphinx.rb +86 -17
  57. data/lib/templates/capistrano/Capfile +2 -6
  58. data/lib/templates/monit/cert.sh +1 -1
  59. data/lib/templates/mysql/install_db.sql.erb +2 -2
  60. data/lib/templates/sphinx/sphinx.conf.erb +28 -399
  61. data/lib/templates/sphinx/sphinx_app.initd.centos.erb +1 -1
  62. data/website/index.html +20 -34
  63. data/website/index.txt +12 -22
  64. data/website/stylesheets/screen.css +22 -11
  65. data/website/template.rhtml +7 -5
  66. data/website/template_recipe.rhtml +7 -3
  67. metadata +55 -15
  68. data/lib/capitate/plugins/package.rb +0 -30
  69. data/lib/capitate/plugins/profiles.rb +0 -33
  70. data/lib/capitate/plugins/wget.rb +0 -23
  71. data/lib/profiles/centos-sick.rb +0 -116
  72. data/lib/recipes/README +0 -5
  73. data/lib/recipes/centos/README +0 -3
  74. data/lib/recipes/gems.rb +0 -20
  75. data/lib/recipes/packages.rb +0 -39
  76. data/lib/recipes/recipes.rb +0 -30
  77. data/lib/templates/centos/setup_for_web.sh +0 -17
  78. data/lib/templates/centos/sudoers +0 -95
@@ -5,40 +5,35 @@ namespace :monit do
5
5
  desc <<-DESC
6
6
  Install monit.
7
7
 
8
- monit_port: Monit port. Defaults to 2812.
9
-
10
- set :monit_port, 2812
11
-
12
- monit_password: Monit password. Defaults to password prompt.
13
-
14
- set :monit_password, Proc.new { Capistrano::CLI.ui.ask('Monit admin password (to set): ') })
15
-
8
+ *monit_build_options*: Monit build options.\n
9
+ *monit_port*: Monit port. _Defaults to 2812_\n
10
+ @set :monit_port, 2812@\n
11
+ *monit_password*: Monit password. _Defaults to password prompt_\n
12
+ @set :monit_password, prompt.password('Monit admin password (to set): ')@\n
13
+ *monit_conf_dir*: Directory for monitrc files.\n
14
+ @set :monit_conf_dir, "/etc/monit"@\n
16
15
  DESC
17
16
  task :install do
18
17
 
19
18
  # Settings
20
19
  fetch_or_default(:monit_port, 2812)
21
- fetch_or_default(:monit_password,
22
- Proc.new { Capistrano::CLI.ui.ask('Monit admin password (to set): ') })
20
+ fetch_or_default(:monit_password, prompt.password('Monit admin password (to set): ', true))
21
+ fetch_or_default(:monit_conf_dir, "/etc/monit")
22
+ fetch(:monit_build_options)
23
23
 
24
24
  # Install dependencies
25
25
  yum.install([ "flex", "byacc" ])
26
26
 
27
- # Build options
28
- monit_options = {
29
- :url => "http://www.tildeslash.com/monit/dist/monit-4.10.1.tar.gz"
30
- }
31
-
32
27
  # Build
33
- script.make_install("monit", monit_options)
28
+ script.make_install("monit", monit_build_options)
34
29
 
35
30
  # Install initscript
36
31
  put template.load("monit/monit.initd.centos.erb"), "/tmp/monit.initd"
37
- sudo "install -o root /tmp/monit.initd /etc/init.d/monit && rm -f /tmp/monit.initd"
32
+ run_via "install -o root /tmp/monit.initd /etc/init.d/monit && rm -f /tmp/monit.initd"
38
33
 
39
34
  # Install monitrc
40
35
  put template.load("monit/monitrc.erb"), "/tmp/monitrc"
41
- sudo "mkdir -p /etc/monit && install -o root -m 700 /tmp/monitrc /etc/monitrc && rm -f /tmp/monitrc"
36
+ run_via "mkdir -p #{monit_conf_dir} && install -o root -m 700 /tmp/monitrc /etc/monitrc && rm -f /tmp/monitrc"
42
37
 
43
38
  # Patch initab
44
39
  script.sh("monit/patch_inittab.sh")
@@ -5,26 +5,23 @@ namespace :mysql do
5
5
  desc <<-DESC
6
6
  Install mysql.
7
7
 
8
- mysql_admin_password_set: Mysql admin password (to set). Defaults to password prompt.
9
-
10
- set :mysql_admin_password_set, Proc.new { Capistrano::CLI.ui.ask('Mysql admin password (to set): ') }
11
-
8
+ *mysql_admin_password_set*: Mysql admin password (to set). _Defaults to password prompt._\n
9
+ <pre>set :mysql_admin_password_set, prompt.password('Mysql admin password (to set): ')</pre>\n
12
10
  DESC
13
11
  task :install do
14
12
 
15
13
  # Settings
16
- fetch_or_default(:mysql_admin_password_set,
17
- Proc.new { Capistrano::CLI.ui.ask('Mysql admin password (to set): ') })
14
+ fetch_or_default(:mysql_admin_password_set, prompt.password('Mysql admin password (to set): ', true))
18
15
 
19
16
  # Install through package manager
20
17
  yum.install([ "mysql", "mysql-devel", "mysql-server" ])
21
18
 
22
19
  # Install service
23
- sudo "/sbin/chkconfig --level 345 mysqld on"
24
- sudo "/sbin/service mysqld start"
20
+ run_via "/sbin/chkconfig --level 345 mysqld on"
21
+ run_via "/sbin/service mysqld start"
25
22
 
26
23
  # Set admin password
27
- sudo "/usr/bin/mysqladmin -u root password #{mysql_admin_password_set}"
24
+ run_via "/usr/bin/mysqladmin -u root password #{mysql_admin_password_set}"
28
25
  end
29
26
 
30
27
  end
@@ -4,26 +4,21 @@ namespace :nginx do
4
4
 
5
5
  desc <<-DESC
6
6
  Install nginx, conf, initscript, nginx user and service.
7
- nginx_bin_path: Nginx sbin path. Defaults to /sbin/nginx
8
7
 
9
- set :nginx_bin_path, "/sbin/nginx"
10
-
11
- nginx_conf_path: Path to nginx conf. Defaults to /etc/nginx/nginx.conf
12
-
13
- set :nginx_conf_path, "/etc/nginx/nginx.conf"
14
-
15
- nginx_pid_path: Path to nginx pid file. Defaults to /var/run/nginx.pid
16
-
17
- set :nginx_pid_path, "/var/run/nginx.pid"
18
-
19
- nginx_prefix_path: Nginx install prefix. Defaults to /var/nginx
20
-
21
- set :nginx_prefix_path, "/var/nginx"
22
-
8
+ *nginx_build_options*: Nginx build options.\n
9
+ *nginx_bin_path*: Nginx sbin path. _Defaults to /sbin/nginx_\n
10
+ @set :nginx_bin_path, "/sbin/nginx"@\n
11
+ *nginx_conf_path*: Path to nginx conf. _Defaults to /etc/nginx/nginx.conf_\n
12
+ @set :nginx_conf_path, "/etc/nginx/nginx.conf"@\n
13
+ *nginx_pid_path*: Path to nginx pid file. _Defaults to /var/run/nginx.pid_\n
14
+ @set :nginx_pid_path, "/var/run/nginx.pid"@\n
15
+ *nginx_prefix_path*: Nginx install prefix. _Defaults to /var/nginx_\n
16
+ @set :nginx_prefix_path, "/var/nginx"@\n
23
17
  DESC
24
18
  task :install do
25
19
 
26
20
  # Settings
21
+ fetch(:nginx_build_options)
27
22
  fetch_or_default(:nginx_bin_path, "/sbin/nginx")
28
23
  fetch_or_default(:nginx_conf_path, "/etc/nginx/nginx.conf")
29
24
  fetch_or_default(:nginx_pid_path, "/var/run/nginx.pid")
@@ -32,30 +27,22 @@ namespace :nginx do
32
27
  # Install dependencies
33
28
  yum.install([ "pcre-devel", "openssl", "openssl-devel" ])
34
29
 
35
- # Build options
36
- nginx_options = {
37
- :url => "http://sysoev.ru/nginx/nginx-0.5.35.tar.gz",
38
- :configure_options => "--sbin-path=#{nginx_bin_path} --conf-path=#{nginx_conf_path} \
39
- --pid-path=#{nginx_pid_path} --error-log-path=/var/log/nginx_master_error.log --lock-path=/var/lock/nginx \
40
- --prefix=#{nginx_prefix_path} --with-md5=auto/lib/md5 --with-sha1=auto/lib/sha1 --with-http_ssl_module"
41
- }
42
-
43
30
  # Build
44
- script.make_install("nginx", nginx_options)
31
+ script.make_install("nginx", nginx_build_options)
45
32
 
46
33
  # Install initscript, and turn it on
47
34
  put template.load("nginx/nginx.initd.erb"), "/tmp/nginx.initd"
48
- sudo "install -o root /tmp/nginx.initd /etc/init.d/nginx && rm -f /tmp/nginx.initd"
49
- sudo "/sbin/chkconfig --level 345 nginx on"
35
+ run_via "install -o root /tmp/nginx.initd /etc/init.d/nginx && rm -f /tmp/nginx.initd"
36
+ run_via "/sbin/chkconfig --level 345 nginx on"
50
37
 
51
38
  # Setup nginx
52
- sudo "mkdir -p /etc/nginx/vhosts"
53
- sudo "echo \"# Blank nginx conf; work-around for nginx conf include issue\" > /etc/nginx/vhosts/blank.conf"
39
+ run_via "mkdir -p /etc/nginx/vhosts"
40
+ run_via "echo \"# Blank nginx conf; work-around for nginx conf include issue\" > /etc/nginx/vhosts/blank.conf"
54
41
  put template.load("nginx/nginx.conf.erb", binding), "/tmp/nginx.conf"
55
- sudo "install -o root -m 644 /tmp/nginx.conf #{nginx_conf_path} && rm -f /tmp/nginx.conf"
42
+ run_via "install -o root -m 644 /tmp/nginx.conf #{nginx_conf_path} && rm -f /tmp/nginx.conf"
56
43
 
57
44
  # Create nginx user
58
- sudo "id nginx || /usr/sbin/adduser -r nginx"
45
+ run_via "id nginx || /usr/sbin/adduser -r nginx"
59
46
  end
60
47
 
61
48
  # Restart nginx
@@ -2,35 +2,30 @@ namespace :ruby do
2
2
 
3
3
  namespace :centos do
4
4
 
5
- desc "Install ruby and rubygems"
5
+ desc <<-DESC
6
+ Install ruby and rubygems.
7
+
8
+ *ruby_build_options*: Ruby build options.\n
9
+ *rubygems_build_options*: Rubygems build options.\n
10
+ DESC
6
11
  task :install do
12
+
13
+ # Settings
14
+ fetch(:ruby_build_options)
15
+ fetch(:rubygems_build_options)
7
16
 
8
17
  # Install dependencies
9
18
  yum.install([ "zlib", "zlib-devel" ])
10
19
 
11
- ruby_options = {
12
- :url => "http://capigen.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
-
18
20
  # Install ruby 1.8.6
19
- script.make_install("ruby", ruby_options)
20
-
21
- # Fix openssl
22
- script.sh("ruby/fix_openssl.sh")
23
-
24
- rubygems_options = {
25
- :url => "http://rubyforge.org/frs/download.php/29548/rubygems-1.0.1.tgz"
26
- }
21
+ script.make_install("ruby", ruby_build_options)
27
22
 
28
23
  # Install rubygems
29
- script.install("rubygems", rubygems_options) do |dir|
30
- sudo "echo 'Running setup...' && cd #{dir} && ruby setup.rb > install.log"
24
+ script.install("rubygems", rubygems_build_options) do |dir|
25
+ run_via "echo 'Running setup...' && cd #{dir} && ruby setup.rb > install.log"
31
26
  end
32
27
 
33
- end
28
+ end
34
29
 
35
30
  end
36
31
 
@@ -3,59 +3,45 @@ namespace :sphinx do
3
3
  namespace :centos do
4
4
 
5
5
  desc <<-DESC
6
- Install sphinx.
7
-
8
- sphinx_prefix: Sphinx install prefix. Defaults to "/usr/local/sphinx"
9
-
10
- set :sphinx_prefix, "/usr/local/sphinx"
11
-
6
+ Install sphinx.\n
7
+ *sphinx_build_options*: Sphinx build options.\n
8
+ *sphinx_prefix*: Sphinx install prefix. _Defaults to "/usr/local/sphinx"_\n
12
9
  DESC
13
10
  task :install do
14
11
 
15
12
  # Settings
13
+ fetch(:sphinx_build_options)
16
14
  fetch_or_default(:sphinx_prefix, "/usr/local/sphinx")
17
15
 
18
16
  # Install dependencies
19
17
  yum.install([ "gcc-c++" ])
20
18
 
21
- # Build options
22
- sphinx_options = {
23
- :url => "http://www.sphinxsearch.com/downloads/sphinx-0.9.7.tar.gz",
24
- :configure_options => "--with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib/mysql \
25
- --prefix=#{sphinx_prefix}"
26
- }
27
-
28
19
  # Build
29
- script.make_install("sphinx", sphinx_options)
20
+ script.make_install("sphinx", sphinx_build_options)
30
21
  end
31
22
 
32
23
  desc <<-DESC
33
- Setup sphinx for application.
34
-
35
- sphinx_prefix: Sphinx install prefix. Defaults to "/usr/local/sphinx"
36
-
37
- set :sphinx_prefix, "/usr/local/sphinx"
38
-
24
+ Setup sphinx for application.\n
25
+ *sphinx_prefix*: Sphinx install prefix. _Defaults to "/usr/local/sphinx"_\n
26
+ *sphinx_pid_path*: Directory to sphinx pid. _Defaults to "[shared_path]/pids/searchd.pid"_\n
27
+ *sphinx_conf_path*: Path to sphinx.conf. _Defaults to "[shared_path]/config/sphinx.conf"_\n
39
28
  DESC
40
29
  task :setup do
41
30
 
42
31
  # Settings
43
32
  fetch_or_default(:sphinx_prefix, "/usr/local/sphinx")
44
-
45
- # Derived settings
46
- set :sphinx_bin_path, "#{sphinx_prefix}/bin"
47
- set :sphinx_conf_path, "#{shared_path}/config/sphinx.conf"
48
- set :sphinx_pid_path, "#{shared_path}/pids/searchd.pid"
33
+ fetch_or_default(:sphinx_pid_path, "#{shared_path}/pids/searchd.pid")
34
+ fetch_or_default(:sphinx_conf_path, "#{shared_path}/config/sphinx.conf")
49
35
 
50
36
  # Install initscript
51
37
  put template.load("sphinx/sphinx_app.initd.centos.erb"), "/tmp/sphinx.initd"
52
- sudo "install -o root /tmp/sphinx.initd /etc/init.d/sphinx_#{application}"
38
+ run_via "install -o root /tmp/sphinx.initd /etc/init.d/sphinx_#{application}"
53
39
 
54
40
  # Enable service
55
- sudo "/sbin/chkconfig --level 345 sphinx_#{application} on"
41
+ run_via "/sbin/chkconfig --level 345 sphinx_#{application} on"
56
42
 
57
43
  # Create app indexes dir
58
- run "mkdir -p #{shared_path}/var/index"
44
+ run_via "mkdir -p #{shared_path}/var/index"
59
45
  end
60
46
  end
61
47
 
data/lib/recipes/docs.rb CHANGED
@@ -1,14 +1,30 @@
1
1
  namespace :docs do
2
2
 
3
- desc "Generate documentation for all currently loaded recipes."
3
+ desc <<-DESC
4
+ Generate documentation for all currently loaded recipes. Assumes textile formatting.
5
+
6
+ *docs_recipes_dir*: Destination directory. _Defaults to "docs/recipes"_
7
+
8
+ @set :docs_recipes_dir, "docs/recipes"@
9
+
10
+ *docs_recipes_clear*: Whether to clear destination before generating.
11
+
12
+ @set :docs_recipes_clear, true@
13
+
14
+ DESC
4
15
  task :recipes do
5
- top_node = capitate.task_tree
6
16
 
7
- dir = "docs/recipes"
8
- FileUtils.rm_rf(dir)
9
- FileUtils.mkdir_p(dir)
17
+ # Settings
18
+ fetch_or_default(:docs_recipes_dir, "docs/recipes")
19
+ fetch_or_default(:docs_recipes_clear, true)
20
+
21
+ # Build task tree
22
+ top_node = capitate.task_tree
23
+
24
+ FileUtils.rm_rf(docs_recipes_dir) if docs_recipes_clear
25
+ FileUtils.mkdir_p(docs_recipes_dir)
10
26
 
11
- top_node.write_doc(dir, "index", "Recipes")
27
+ top_node.write_doc(docs_recipes_dir, "index", "Recipes")
12
28
 
13
29
  end
14
30
  end
@@ -1,24 +1,30 @@
1
1
  namespace :memcached do
2
2
 
3
3
  desc <<-DESC
4
- Install memcached monit hooks.
4
+ Generate and install memcached monitrc.
5
5
 
6
- memcached_pid_path: Path to memcached pid file. Defaults to /var/run/memcached.pid
6
+ *memcached_pid_path*: Path to memcached pid file. _Defaults to /var/run/memcached.pid_
7
7
 
8
- set :memcached_pid_path, "/var/run/memcached.pid"
8
+ @set :memcached_pid_path, "/var/run/memcached.pid"@
9
9
 
10
- memcached_port: Memcached port. Defaults to 11211.
11
-
12
- set :memcached_port, 11211
10
+ *memcached_port*: Memcached port. _Defaults to 11211_
11
+
12
+ @set :memcached_port, 11211@
13
+
14
+ *monit_conf_dir*: Destination for monitrc. _Defaults to "/etc/monit"_
15
+
16
+ @set :monit_conf_dir, "/etc/monit"@
17
+
13
18
  DESC
14
19
  task :install_monit do
15
20
 
16
21
  # Settings
17
22
  fetch_or_default(:memcached_pid_path, "/var/run/memcached.pid")
18
23
  fetch_or_default(:memcached_port, 11211)
24
+ fetch_or_default(:monit_conf_dir, "/etc/monit")
19
25
 
20
- put template.load("memcached/memcached.monitrc.erb", binding), "/tmp/memcached.monitrc"
21
- sudo "install -o root /tmp/memcached.monitrc /etc/monit/memcached.monitrc"
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"
22
28
  end
23
29
 
24
30
  end
@@ -4,19 +4,15 @@ namespace :mongrel_cluster do
4
4
  desc <<-DESC
5
5
  Create monit configuration for mongrel cluster.
6
6
 
7
- mongrel_size: Number of mongrels.
8
-
9
- set :mongrel_size, 3
10
-
11
- mongrel_port: Starting port for mongrels. If there are 3 mongrels with port 9000, then instances
12
- will be at 9000, 9001, and 9002
13
-
14
- set :mongrel_port, 9000
15
-
16
- mongrel_config_script: Config script to load with mongrel.
17
-
18
- set :mongrel_config_script, "config/mongrel_handler.rb"
19
-
7
+ *mongrel_size*: Number of mongrels.\n
8
+ @set :mongrel_size, 3@\n
9
+ *mongrel_port*: Starting port for mongrels. If there are 3 mongrels with port 9000, then instances
10
+ will be at 9000, 9001, and 9002\n
11
+ @set :mongrel_port, 9000@\n
12
+ *mongrel_config_script*: Config script to load with mongrel. _Defaults to nil_\n
13
+ @set :mongrel_config_script, "config/mongrel_handler.rb"@\n
14
+ *monit_conf_dir*: Destination for monitrc. _Defaults to "/etc/monit"_\n
15
+ @set :monit_conf_dir, "/etc/monit"@\n
20
16
  DESC
21
17
  task :setup_monit do
22
18
 
@@ -29,6 +25,7 @@ namespace :mongrel_cluster do
29
25
  fetch(:mongrel_size)
30
26
  fetch(:mongrel_port)
31
27
  fetch_or_default(:mongrel_config_script, nil)
28
+ fetch_or_default(:monit_conf_dir, "/etc/monit")
32
29
 
33
30
  processes = []
34
31
  ports = (0...mongrel_size).collect { |i| mongrel_port + i }
@@ -60,7 +57,7 @@ namespace :mongrel_cluster do
60
57
  set :processes, processes
61
58
 
62
59
  put template.load("mongrel/mongrel_cluster.monitrc.erb"), "/tmp/mongrel_cluster_#{application}.monitrc"
63
- sudo "install -o root /tmp/mongrel_cluster_#{application}.monitrc /etc/monit/mongrel_cluster_#{application}.monitrc"
60
+ sudo "install -o root /tmp/mongrel_cluster_#{application}.monitrc #{monit_conf_dir}/mongrel_cluster_#{application}.monitrc"
64
61
  end
65
62
 
66
63
  end
data/lib/recipes/mysql.rb CHANGED
@@ -4,53 +4,35 @@ namespace :mysql do
4
4
  desc <<-DESC
5
5
  Install mysql monit hooks.
6
6
 
7
- db_port: Mysql port. Defaults to 3306.
8
-
9
- set :db_port, 3306
10
-
11
- mysql_pid_path: Path to mysql pid file. Defaults to /var/run/mysqld/mysqld.pid
12
-
13
- set :mysql_pid_path, "/var/run/mysqld/mysqld.pid"
14
-
7
+ *db_port*: Mysql port. _Defaults to 3306_\n
8
+ *mysql_pid_path*: Path to mysql pid file. _Defaults to /var/run/mysqld/mysqld.pid_\n
9
+ @set :mysql_pid_path, "/var/run/mysqld/mysqld.pid"@\n
10
+ *monit_conf_dir*: Destination for monitrc. _Defaults to "/etc/monit"_\n
11
+ @set :monit_conf_dir, "/etc/monit"@\n
15
12
  DESC
16
13
  task :install_monit do
17
14
 
18
15
  # Settings
19
16
  fetch_or_default(:mysql_pid_path, "/var/run/mysqld/mysqld.pid")
20
- fetch_or_default(:db_port, 3306)
17
+ fetch_or_default(:db_port, 3306)
18
+ fetch_or_default(:monit_conf_dir, "/etc/monit")
21
19
 
22
20
  put template.load("mysql/mysql.monitrc.erb", binding), "/tmp/mysql.monitrc"
23
- sudo "install -o root /tmp/mysql.monitrc /etc/monit/mysql.monitrc"
21
+ run_via "install -o root /tmp/mysql.monitrc #{monit_conf_dir}/mysql.monitrc"
24
22
  end
25
23
 
26
24
  desc <<-DESC
27
- Create database user, and database with appropriate permissions.
28
-
29
- db_name: Database name (application).
30
-
31
- set :db_name, "app_db_name"
32
-
33
- db_user: Database user (application).
34
-
35
- set :db_user, "app_db_user"
36
-
37
- db_pass: Database password (application).
38
-
39
- set :db_pass, "the_password"
40
-
41
- web_host: Web host to provide access privileges to (if recipe used in context of web app).
42
- Defaults to nil. TODO: Support multiple web hosts
43
-
44
- set :web_host, 10.0.6.100
45
-
46
- db_host: Database host (to provide itself with access).
47
-
48
- set :db_host, 10.0.6.101
49
-
50
- mysql_admin_password: Mysql admin password (to use to connect). Defaults to password prompt.
51
-
52
- set :mysql_admin_password, Proc.new { Capistrano::CLI.ui.ask('Mysql admin password: ') })
53
-
25
+ Create database, database user, and set grant permissions.
26
+
27
+ *db_name*: Database name (application).\n
28
+ *db_user*: Database user (application).\n
29
+ *db_pass*: Database password (application).\n
30
+ *grant_locations*: Grant locations. _Defaults to localhost_\n
31
+ @set :grant_locations, [ "localhost", "192.168.1.111" ]@\n
32
+ *grant_priv_type*: Grant privilege types. _Defaults to ALL_\n
33
+ @set :grant_priv_type, "ALL"@\n
34
+ *mysql_admin_password*: Mysql admin password (to use to connect). Defaults to password prompt.\n
35
+ @set :mysql_admin_password, prompt.password('Mysql admin password: '))@
54
36
  DESC
55
37
  task :setup do
56
38
 
@@ -58,9 +40,9 @@ namespace :mysql do
58
40
  fetch(:db_name)
59
41
  fetch(:db_user)
60
42
  fetch(:db_pass)
61
- fetch(:db_host)
62
- fetch_or_default(:mysql_admin_password, Proc.new { Capistrano::CLI.ui.ask('Mysql admin password: ') })
63
- fetch_or_default(:web_host, nil)
43
+ fetch_or_default(:mysql_admin_password, prompt.password('Mysql admin password: '))
44
+ fetch_or_default(:grant_locations, [ "localhost" ])
45
+ fetch_or_default(:grant_priv_type, "ALL")
64
46
 
65
47
  # Add localhost to grant locations
66
48
  set :locations_for_grant, [ "localhost", web_host, db_host ].compact
data/lib/recipes/nginx.rb CHANGED
@@ -4,18 +4,23 @@ namespace :nginx do
4
4
  desc <<-DESC
5
5
  Install nginx monit hooks.
6
6
 
7
- nginx_pid_path: Path to nginx pid file. Defaults to /var/run/nginx.pid
7
+ *nginx_pid_path*: Path to nginx pid file. _Defaults to /var/run/nginx.pid_
8
+
9
+ @set :nginx_pid_path, "/var/run/nginx.pid"@
10
+
11
+ *monit_conf_dir*: Destination for monitrc. _Defaults to "/etc/monit"_
12
+
13
+ @set :monit_conf_dir, "/etc/monit"@
8
14
 
9
- set :nginx_pid_path, "/var/run/nginx.pid"
10
-
11
15
  DESC
12
16
  task :install_monit do
13
17
 
14
18
  # Settings
15
19
  fetch_or_default(:nginx_pid_path, "/var/run/nginx.pid")
20
+ fetch_or_default(:monit_conf_dir, "/etc/monit")
16
21
 
17
22
  put template.load("nginx/nginx.monitrc.erb", binding), "/tmp/nginx.monitrc"
18
- sudo "install -o root /tmp/nginx.monitrc /etc/monit/nginx.monitrc"
23
+ run_via "install -o root /tmp/nginx.monitrc #{monit_conf_dir}/nginx.monitrc"
19
24
  end
20
25
 
21
26
  desc <<-DESC
data/lib/recipes/rails.rb CHANGED
@@ -4,17 +4,17 @@ namespace :rails do
4
4
  desc <<-DESC
5
5
  Create database yaml in shared path.
6
6
 
7
- db_name: Database name (rails).
7
+ *db_name*: Database name (rails).
8
8
 
9
- set :db_name, "app_db_name"
9
+ @set :db_name, "app_db_name"@
10
10
 
11
- db_user: Database user (rails).
11
+ *db_user*: Database user (rails).
12
12
 
13
- set :db_user, "app_db_user"
13
+ @set :db_user, "app_db_user"@
14
14
 
15
- db_pass: Database password (rails).
15
+ *db_pass*: Database password (rails).
16
16
 
17
- set :db_pass, "the_password"
17
+ @set :db_pass, "the_password"@
18
18
 
19
19
  DESC
20
20
  task :setup do
@@ -32,4 +32,51 @@ namespace :rails do
32
32
  task :update_code do
33
33
  run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
34
34
  end
35
+
36
+ desc <<-DESC
37
+ Tail production log files. (http://errtheblog.com/posts/19-streaming-capistrano)
38
+ DESC
39
+ task :tail_logs, :roles => :web do
40
+ run "tail -f #{shared_path}/log/production.log" do |channel, stream, data|
41
+ puts # for an extra line break before the host name
42
+ puts "#{channel[:host]}: #{data}"
43
+ break if stream == :err
44
+ end
45
+ end
46
+
47
+
48
+ desc <<-DESC
49
+ Check production log files in TextMate. (http://errtheblog.com/posts/19-streaming-capistrano)
50
+ DESC
51
+ task :mate_logs, :roles => :app do
52
+
53
+ require 'tempfile'
54
+ tmp = Tempfile.open('w')
55
+ logs = Hash.new { |h,k| h[k] = '' }
56
+
57
+ run "tail -n500 #{shared_path}/log/production.log" do |channel, stream, data|
58
+ logs[channel[:host]] << data
59
+ break if stream == :err
60
+ end
61
+
62
+ logs.each do |host, log|
63
+ tmp.write("--- #{host} ---\n\n")
64
+ tmp.write(log + "\n")
65
+ end
66
+
67
+ exec "mate -w #{tmp.path}"
68
+ tmp.close
69
+ end
70
+
71
+ desc <<-DESC
72
+ Remotely console. (http://errtheblog.com/posts/19-streaming-capistrano)
73
+ DESC
74
+ task :console, :roles => :app do
75
+ input = ''
76
+ run "cd #{current_path} && ./script/console #{ENV['RAILS_ENV']}" do |channel, stream, data|
77
+ next if data.chomp == input.chomp || data.chomp == ''
78
+ print data
79
+ channel.send_data(input = $stdin.gets) if data =~ /^(>|\?)>/
80
+ end
81
+ end
35
82
  end