capitate 0.2.11 → 0.2.13

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.
Files changed (52) hide show
  1. data/History.txt +9 -0
  2. data/Manifest.txt +11 -1
  3. data/lib/capitate/cap_ext/connections.rb +15 -8
  4. data/lib/capitate/cap_ext/run_via.rb +2 -0
  5. data/lib/capitate/cap_ext/variables.rb +9 -2
  6. data/lib/capitate/plugins/base.rb +17 -12
  7. data/lib/capitate/plugins/build.rb +14 -11
  8. data/lib/capitate/plugins/prompt.rb +6 -8
  9. data/lib/capitate/plugins/script.rb +6 -4
  10. data/lib/capitate/plugins/templates.rb +16 -7
  11. data/lib/capitate/plugins/upload.rb +2 -1
  12. data/lib/capitate/plugins/utils.rb +7 -5
  13. data/lib/capitate/task_node.rb +30 -32
  14. data/lib/capitate/version.rb +1 -1
  15. data/lib/recipes/backgroundrb.rb +18 -4
  16. data/lib/recipes/centos/backgroundrb.rb +10 -3
  17. data/lib/recipes/centos/centos.rb +21 -8
  18. data/lib/recipes/centos/imagemagick.rb +4 -1
  19. data/lib/recipes/centos/memcached.rb +26 -8
  20. data/lib/recipes/centos/mongrel_cluster.rb +33 -13
  21. data/lib/recipes/centos/monit.rb +32 -11
  22. data/lib/recipes/centos/mysql.rb +7 -2
  23. data/lib/recipes/centos/nginx.rb +29 -10
  24. data/lib/recipes/centos/ruby.rb +11 -2
  25. data/lib/recipes/centos/sphinx.rb +32 -10
  26. data/lib/recipes/docs.rb +12 -7
  27. data/lib/recipes/logrotate/backgroundrb.rb +25 -0
  28. data/lib/recipes/logrotated.rb +18 -12
  29. data/lib/recipes/memcached.rb +0 -25
  30. data/lib/recipes/monit/backgroundrb.rb +39 -0
  31. data/lib/recipes/monit/memcached.rb +22 -0
  32. data/lib/recipes/{mongrel_cluster.rb → monit/mongrel_cluster.rb} +22 -12
  33. data/lib/recipes/monit/mysql.rb +21 -0
  34. data/lib/recipes/monit/nginx.rb +34 -0
  35. data/lib/recipes/monit/sphinx.rb +29 -0
  36. data/lib/recipes/monit/sshd.rb +27 -0
  37. data/lib/recipes/monit.rb +18 -3
  38. data/lib/recipes/mysql.rb +22 -32
  39. data/lib/recipes/nginx.rb +15 -30
  40. data/lib/recipes/rails.rb +17 -6
  41. data/lib/recipes/sphinx.rb +11 -24
  42. data/lib/recipes/sshd.rb +4 -22
  43. data/lib/recipes/syslogd.rb +4 -0
  44. data/lib/templates/backgroundrb/backgroundrb.monitrc.erb +4 -0
  45. data/lib/templates/backgroundrb/backgroundrb.yml.erb +4 -0
  46. data/website/index.html +10 -2
  47. data/website/javascripts/code_highlighter.js +188 -0
  48. data/website/javascripts/ruby.js +18 -0
  49. data/website/stylesheets/screen.css +116 -23
  50. data/website/template.rhtml +9 -1
  51. data/website/template_recipe.rhtml +12 -1
  52. metadata +13 -3
data/History.txt CHANGED
@@ -1,3 +1,12 @@
1
+ == 0.2.13 2008-03-26
2
+
3
+ * Fixing monit re/start for mongrel cluster and backgroundrb
4
+
5
+ == 0.2.12 2008-03-26
6
+
7
+ * Re-formatting some documentation, experimenting with getting source in the docs (FAIL!)
8
+ * Including backgroundrb logrotate, monit, restart
9
+
1
10
  == 0.2.11 2008-03-25
2
11
 
3
12
  * Backgroundrb recipes and templates
data/Manifest.txt CHANGED
@@ -38,6 +38,7 @@ lib/recipes/centos/nginx.rb
38
38
  lib/recipes/centos/ruby.rb
39
39
  lib/recipes/centos/sphinx.rb
40
40
  lib/recipes/docs.rb
41
+ lib/recipes/logrotate/backgroundrb.rb
41
42
  lib/recipes/logrotate/mongrel_cluster.rb
42
43
  lib/recipes/logrotate/monit.rb
43
44
  lib/recipes/logrotate/nginx.rb
@@ -45,8 +46,14 @@ lib/recipes/logrotate/rails.rb
45
46
  lib/recipes/logrotate/sphinx.rb
46
47
  lib/recipes/logrotated.rb
47
48
  lib/recipes/memcached.rb
48
- lib/recipes/mongrel_cluster.rb
49
49
  lib/recipes/monit.rb
50
+ lib/recipes/monit/backgroundrb.rb
51
+ lib/recipes/monit/memcached.rb
52
+ lib/recipes/monit/mongrel_cluster.rb
53
+ lib/recipes/monit/mysql.rb
54
+ lib/recipes/monit/nginx.rb
55
+ lib/recipes/monit/sphinx.rb
56
+ lib/recipes/monit/sshd.rb
50
57
  lib/recipes/mysql.rb
51
58
  lib/recipes/nginx.rb
52
59
  lib/recipes/rails.rb
@@ -54,6 +61,7 @@ lib/recipes/sphinx.rb
54
61
  lib/recipes/sshd.rb
55
62
  lib/recipes/syslogd.rb
56
63
  lib/templates/backgroundrb/backgroundrb.initd.centos.erb
64
+ lib/templates/backgroundrb/backgroundrb.monitrc.erb
57
65
  lib/templates/backgroundrb/backgroundrb.yml.erb
58
66
  lib/templates/capistrano/Capfile
59
67
  lib/templates/logrotated/conf.erb
@@ -92,7 +100,9 @@ test/test_roles.rb
92
100
  test/test_templates.rb
93
101
  website/index.html
94
102
  website/index.txt
103
+ website/javascripts/code_highlighter.js
95
104
  website/javascripts/rounded_corners_lite.inc.js
105
+ website/javascripts/ruby.js
96
106
  website/stylesheets/screen.css
97
107
  website/template.rhtml
98
108
  website/template_recipe.rhtml
@@ -12,13 +12,21 @@ module Capitate
12
12
  # establishes connections to them, and then yields that list of
13
13
  # servers.
14
14
  #
15
- # Overriden to handle NoMatchingServersError as NON-FATAL
15
+ # If you set:
16
+ #
17
+ # set :ignore_missing_roles, true
18
+ #
19
+ # Overriden to handle NoMatchingServersError as NON-FATAL.
16
20
  #
17
- def execute_on_servers_with_capitate(options={}, &block)
18
- begin
21
+ def execute_on_servers_with_capitate(options={}, &block)
22
+ if exists?(:ignore_missing_roles) && fetch(:ignore_missing_roles)
23
+ begin
24
+ execute_on_servers_without_capitate(options, &block)
25
+ rescue Capistrano::NoMatchingServersError => e
26
+ logger.important "`#{current_task.fully_qualified_name}' is only run for servers matching #{current_task.options.inspect}, but no servers matched"
27
+ end
28
+ else
19
29
  execute_on_servers_without_capitate(options, &block)
20
- rescue Capistrano::NoMatchingServersError => e
21
- logger.important "`#{current_task.fully_qualified_name}' is only run for servers matching #{current_task.options.inspect}, but no servers matched"
22
30
  end
23
31
  end
24
32
 
@@ -59,7 +67,7 @@ module Capitate
59
67
  clear_sessions
60
68
  end
61
69
 
62
- # Yields the previous user.
70
+ # Perform action as a different user. Yields the previous user to the block.
63
71
  #
64
72
  # ==== Options
65
73
  # +new_user+:: User to become
@@ -81,8 +89,7 @@ module Capitate
81
89
  clear_sessions
82
90
  end
83
91
 
84
- # Close all open sessions.
85
- # Will force user to re-login.
92
+ # Close all open sessions, and will force user to re-login.
86
93
  def clear_sessions
87
94
  sessions.each do |key, session|
88
95
  logger.info "Closing: #{key}"
@@ -2,6 +2,8 @@ module Capitate::CapExt::RunVia
2
2
 
3
3
  # Invoke command with current run_method setting.
4
4
  #
5
+ # Chooses +sudo+ or +run+ based on <tt>:run_method</tt> setting.
6
+ #
5
7
  # ==== Options
6
8
  # +cmd+:: Command to run
7
9
  # +options+:: Options (see invoke_command options)
@@ -7,7 +7,7 @@ module Capitate
7
7
  base.send :alias_method, :fetch, :fetch_with_capitate
8
8
  end
9
9
 
10
- # Fetch (alias method chained) variable.
10
+ # Fetch.
11
11
  # Displays usage message from recipe docs if variable not found.
12
12
  #
13
13
  # See capistrano fetch for usage info.
@@ -72,7 +72,7 @@ module Capitate
72
72
  nil
73
73
  end
74
74
 
75
- # Fetch roles with name and options
75
+ # Fetch roles with name and options.
76
76
  # I don't actually use this.
77
77
  #
78
78
  # ==== Options
@@ -124,6 +124,13 @@ module Capitate
124
124
  return matched.first if matched
125
125
  nil
126
126
  end
127
+
128
+
129
+ def link_to_source(recipe_path)
130
+ full_path = File.expand_path(recipe_path)
131
+ project_path = File.expand_path(File.dirname(__FILE__) + "/../../../")
132
+ "http://github.com/gabriel/capitate/tree/master#{full_path.sub(project_path, "")}"
133
+ end
127
134
 
128
135
  end
129
136
  end
@@ -5,17 +5,16 @@ require 'yaml'
5
5
  module Capitate::Plugins::Base
6
6
 
7
7
  # Project root. Fetch from :project_root, or fall back to RAILS_ROOT.
8
- #
9
8
  def root
10
- if respond_to?(:fetch)
11
- return fetch(:project_root)
12
- else
13
- RAILS_ROOT
14
- end
9
+ return fetch(:project_root) if exists?(:project_root)
10
+ RAILS_ROOT
15
11
  end
16
12
 
17
13
  # Path relative to project root.
18
- # Project root is set via, set :project_root, "path/to/project" in Capfile.
14
+ #
15
+ # To set the project root:
16
+ #
17
+ # set :project_root, "path/to/project" in Capfile.
19
18
  #
20
19
  # ==== Options
21
20
  # +path+:: Relative path
@@ -48,7 +47,7 @@ module Capitate::Plugins::Base
48
47
  # Usage for current task.
49
48
  #
50
49
  # ==== Options
51
- # +variable+:: Missing variable setting
50
+ # +variable+:: Missing variable setting (to display as not set)
52
51
  #
53
52
  # ==== Examples
54
53
  # usage(:gem_list) => "Description from task definition."
@@ -86,7 +85,13 @@ module Capitate::Plugins::Base
86
85
  s.split("\n").collect { |sp| "#{indentation}#{sp}"}.join("\n")
87
86
  end
88
87
 
89
- # Unindent, lifted from capistrano bin/capify
88
+ # Unindent.
89
+ #
90
+ # Lifted from capistrano bin/capify
91
+ #
92
+ # ==== Options
93
+ # +string+:: String to unindent
94
+ #
90
95
  def unindent(string)
91
96
  return "" if string.blank?
92
97
  if string =~ /\A(\s*)/
@@ -96,7 +101,7 @@ module Capitate::Plugins::Base
96
101
  string
97
102
  end
98
103
 
99
- # Load all tasks
104
+ # Load all tasks into an array.
100
105
  def load_all_tasks
101
106
  tasks = []
102
107
  top.namespaces.each do |namespace|
@@ -105,7 +110,7 @@ module Capitate::Plugins::Base
105
110
  tasks
106
111
  end
107
112
 
108
- # Task tree
113
+ # Build a task tree, consisting of task nodes.
109
114
  def task_tree
110
115
  top_node = Capitate::TaskNode.new("top")
111
116
 
@@ -116,7 +121,7 @@ module Capitate::Plugins::Base
116
121
  end
117
122
 
118
123
  protected
119
-
124
+
120
125
  def load_tasks(namespace, tasks = [])
121
126
  recipe = namespace.last
122
127
 
@@ -4,16 +4,17 @@ module Capitate::Plugins::Build
4
4
  #
5
5
  # ==== Options
6
6
  # +name+:: Name for app
7
- # +options+:: Options
8
- # - +build_dest+:: Place to build from, ex. /usr/src, defaults to /tmp/name
9
- # - +url+:: URL to download package from
10
- # - +configure_options+:: Options for ./configure
11
- # - +symlink+:: After install, list of source, dest pairs to symlink
7
+ # +options+:: Options (See Make install options)
8
+ #
9
+ # ==== Make install options
10
+ # +build_dest+:: Place to build from, ex. /usr/src, defaults to /tmp/name
11
+ # +url+:: URL to download package from
12
+ # +configure_options+:: Options for ./configure
13
+ # +symlink+:: After install, list of source, dest pairs to symlink
12
14
  # [ { "/usr/local/sphinx-0.9.8-rc1" => "/usr/local/sphinx" }, ... ]
13
15
  # ln -s /usr/local/sphinx-0.9.8-rc1 /usr/local/sphinx
14
- #
15
- # - +unpack_dir+:: Directory that is unpacked from tgz (if not matching the file name)
16
- # - +to_log+:: If specified, will redirect output to this path
16
+ # +unpack_dir+:: Directory that is unpacked from tgz (if not matching the file name)
17
+ # +to_log+:: If specified, will redirect output to this path
17
18
  #
18
19
  # ==== Examples (in capistrano task)
19
20
  # build.make_install("nginx", { :url => "http://sysoev.ru/nginx/nginx-0.5.35.tar.gz", ... })
@@ -44,9 +45,11 @@ module Capitate::Plugins::Build
44
45
  #
45
46
  # ==== Options
46
47
  # +name+:: Name for app
47
- # +options+:: Options
48
- # - +build_dest+:: Place to build from, ex. /usr/src, defaults to /tmp/name
49
- # - +url+:: URL to download package from
48
+ # +options+:: Options (see Install options)
49
+ #
50
+ # ==== Install options
51
+ # +build_dest+:: Place to build from, ex. /usr/src, defaults to /tmp/name
52
+ # +url+:: URL to download package from
50
53
  #
51
54
  # ==== Examples (in capistrano task)
52
55
  # script.make("rubygems", { :url => :url => "http://rubyforge.org/frs/download.php/29548/rubygems-1.0.1.tgz" }) do |dir|
@@ -16,10 +16,12 @@ module Capitate::Plugins::Prompt
16
16
  #
17
17
  # ==== Options
18
18
  # +label+:: Label
19
- # +options+:: Options
20
- # - +verify+:: If true, prompt twice and verify
21
- # - +lazy+:: If true, returns a Proc. _Defaults to true_
22
- # - +check_hash+:: If present, checks that md5 is same as password md5
19
+ # +options+:: Options (see Password options)
20
+ #
21
+ # ==== Password options
22
+ # +verify+:: If true, prompt twice and verify
23
+ # +lazy+:: If true, returns a Proc. _Defaults to true_
24
+ # +check_hash+:: If present, checks that md5 is same as password md5
23
25
  #
24
26
  def password(label, options = {})
25
27
 
@@ -67,10 +69,6 @@ module Capitate::Plugins::Prompt
67
69
  password_prompt.call
68
70
  end
69
71
 
70
- def check_password_hash(password, hash)
71
- MD5.md5()
72
- end
73
-
74
72
  end
75
73
 
76
74
  Capistrano.plugin :prompt, Capitate::Plugins::Prompt
@@ -36,9 +36,11 @@ module Capitate::Plugins::Script
36
36
  # ==== Options
37
37
  # +url+:: URL to download
38
38
  # +dest+:: Destination directory
39
- # +options+::
40
- # - +clean+:: If true will remove the unpacked directory. _Defaults to true_
41
- # - +unpack_dir+:: Directory that is unpacked from tgz (if not matching the file name)
39
+ # +options+:: Options (see Unpack options)
40
+ #
41
+ # ==== Unpack options
42
+ # +clean+:: If true will remove the unpacked directory. _Defaults to true_
43
+ # +unpack_dir+:: Directory that is unpacked from tgz (if not matching the file name)
42
44
  #
43
45
  # ==== Examples
44
46
  # script.unpack("http://rubyforge.org/frs/download.php/29548/rubygems-1.0.1.tgz", "/tmp/rubygems") do
@@ -80,7 +82,7 @@ module Capitate::Plugins::Script
80
82
  #
81
83
  # ==== Options
82
84
  # +cmds+:: Commands (separated by newlines)
83
- # +options+:: See invoke_command options
85
+ # +options+:: See Capistrano invoke_command options
84
86
  #
85
87
  def run_all(cmds, options = {}, &block)
86
88
  cmds.split("\n").each do |cmd|
@@ -1,6 +1,6 @@
1
1
  module Capitate::Plugins::Templates
2
2
 
3
- # Load template. If extension is erb will be evaluated with binding.
3
+ # Load template. If the extension is .erb will be evaluated with binding.
4
4
  #
5
5
  # You can add to the list of places we search for templates by setting:
6
6
  #
@@ -17,8 +17,9 @@ module Capitate::Plugins::Templates
17
17
  # +override_binding+:: Binding to override, otherwise uses current (task) binding
18
18
  #
19
19
  # ==== Examples
20
- # template.load("memcached/memcached.monitrc.erb")
21
- # put template.load("memcached/memcached.monitrc.erb"), "/tmp/memcached.monitrc"
20
+ # template.load("memcached/memcached.monitrc.erb") => "This is the text of eval'ed template found at ..."
21
+ #
22
+ # put template.load("memcached/memcached.monitrc.erb"), "/tmp/memcached.monitrc" # Uploads eval'ed template to remote /tmp/ directory
22
23
  #
23
24
  def load(path, override_binding = nil)
24
25
  template_dirs_found = template_dirs.select { |dir| File.exist?("#{dir}/#{path}") }
@@ -69,9 +70,16 @@ module Capitate::Plugins::Templates
69
70
 
70
71
  protected
71
72
 
72
- # Load all possible places for templates
73
+ # Load all possible places for templates.
74
+ #
75
+ # Returns:
76
+ # * the <tt>:templates_dirs</tt> setting (if set)
77
+ # * the current directory
78
+ # * the <tt>:project_root</tt> setting (if set)
79
+ # * the gem templates path
80
+ #
73
81
  def template_dirs
74
- @template_dir ||= begin
82
+ @template_dirs ||= begin
75
83
  template_dirs = []
76
84
  template_dirs += fetch(:templates_dirs) if exists?(:templates_dirs)
77
85
  template_dirs << "."
@@ -88,11 +96,12 @@ protected
88
96
 
89
97
  # Get full template path from relative path.
90
98
  #
91
- # Something like <tt>monit/monit.cnf => /usr/lib/..../capitate/lib/templates/monit/monit.cnf</tt>.
92
- #
93
99
  # ==== Options
94
100
  # +template_path+:: Relative path
95
101
  #
102
+ # ==== Examples
103
+ # gem_template_path("monit/monit.cnf") => /usr/lib/..../capitate/lib/templates/monit/monit.cnf
104
+ #
96
105
  def gem_template_path(template_path)
97
106
  File.join(gem_templates_root, template_path)
98
107
  end
@@ -1,11 +1,12 @@
1
1
  module Capitate::Plugins::Upload
2
2
 
3
3
  # Upload file with source path.
4
+ #
4
5
  # Data is streamed.
5
6
  #
6
7
  # ==== Options
7
8
  # +src_path+:: Source path
8
- # +dest_path:: Remote destination path
9
+ # +dest_path+:: Remote destination path
9
10
  # +options+:: Options (see capistrano 'put')
10
11
  #
11
12
  # ==== Examples
@@ -27,12 +27,14 @@ module Capitate::Plugins::Utils
27
27
  # ==== Options
28
28
  # +template_path+:: Path to template
29
29
  # +destination+:: Remote path to evaluated template
30
- # +options+::
31
- # - +user+:: User to install (-o)
32
- # - +mode+:: Mode to install file (-m)
30
+ # +options+:: Options (see Install template options)
31
+ #
32
+ # ==== Install template options
33
+ # +user+:: User to install (-o). Defaults to *root*.
34
+ # +mode+:: Mode to install file (-m)
33
35
  #
34
36
  # ==== Example
35
- # utils.install_template("monit/memcached.monitrc.erb", "/etc/monit/memcached.monitrc")
37
+ # utils.install_template("monit/memcached.monitrc.erb", "/etc/monit/memcached.monitrc", :user => "root", :mode => "600")
36
38
  #
37
39
  def install_template(template_path, destination, options = {})
38
40
  # Truncate extension
@@ -96,7 +98,7 @@ module Capitate::Plugins::Utils
96
98
  # ==== Options
97
99
  # +path+:: Path to file to append to
98
100
  # +data+:: String data to append
99
- # +check+:: If not nil, will check to see if egrep matches "^string_to_check" and will not re-append
101
+ # +check+:: If not nil, will check to see if egrep matches this regex and will not re-append
100
102
  # +left_strip+:: If true (default), remove whitespace before lines
101
103
  # +should_exist+:: If true (default), raise error if file does not exist
102
104
  #
@@ -50,13 +50,11 @@ class Capitate::TaskNode
50
50
  end
51
51
 
52
52
  # Get "child" nodes (sorted).
53
- #
54
53
  def sorted_nodes
55
54
  nodes.sort_by(&:name)
56
55
  end
57
56
 
58
57
  # Get tasks (sorted).
59
- #
60
58
  def sorted_tasks
61
59
  tasks.sort_by(&:fully_qualified_name) # { |t| t.name.to_s }
62
60
  end
@@ -107,6 +105,8 @@ class Capitate::TaskNode
107
105
  file_name ||= full_name
108
106
  title ||= full_name(":")
109
107
 
108
+
109
+
110
110
  path = "#{dir}/#{file_name}.txt"
111
111
  puts "%10s %-30s" % [ "create", path ]
112
112
 
@@ -159,15 +159,18 @@ class Capitate::TaskNode
159
159
  unless tasks.empty?
160
160
  file.puts "\n\nh2. Task documentation\n\n"
161
161
  sorted_tasks.each do |task|
162
+ file.puts %{<div class="recipe">\n\n}
162
163
  file.puts "h3(##{task.fully_qualified_name}). #{task.fully_qualified_name}\n\n"
163
- file.puts "#{unindent(task.desc)}\n\n\n\n"
164
+ file.puts "#{unindent(task.desc)}\n\n"
165
+ file.puts "</div>\n\n\n"
164
166
  end
165
167
  end
166
168
 
167
169
  #
168
170
  # Write doc (recursively for "child" namespace)
171
+ #
169
172
  sorted_nodes.each do |snode|
170
- snode.write_doc(dir)
173
+ snode.write_doc(dir, nil, nil, options)
171
174
  end
172
175
 
173
176
  # If block then let it do stuff with open file
@@ -179,7 +182,6 @@ class Capitate::TaskNode
179
182
  end
180
183
 
181
184
  # Node to string.
182
- #
183
185
  def to_s(level = 0)
184
186
  spaces = " "
185
187
  indent = (0...level).collect { spaces }.join("")
@@ -197,37 +199,33 @@ class Capitate::TaskNode
197
199
  s += node.to_s(level + 1)
198
200
  end
199
201
  s
200
- end
202
+ end
201
203
 
202
- # Class methods
203
- class << self
204
+ # Create nodes and and task to node.
205
+ #
206
+ # If task is "mysql:centos:install", the nodes will look like:
207
+ #
208
+ # (top node) -> (mysql node) -> (centos node; w/ tasks: install)
209
+ #
210
+ # ==== Options
211
+ # +top_node+:: Node to start at
212
+ # +task+:: Task to add
213
+ #
214
+ def self.populate_with_task(top_node, task)
215
+ node_names = task.namespace.fully_qualified_name.split(":")
204
216
 
205
- # Create nodes and and task to node.
206
- #
207
- # If task is "mysql:centos:install", the nodes will look like:
208
- #
209
- # (top node) -> (mysql node) -> (centos node; w/ tasks: install)
210
- #
211
- # ==== Options
212
- # +top_node+:: Node to start at
213
- # +task+:: Task to add
214
- #
215
- def populate_with_task(top_node, task)
216
- node_names = task.namespace.fully_qualified_name.split(":")
217
-
218
- node = top_node
219
-
220
- node_names.each do |name|
221
- parent_node = node
222
- node = parent_node.find(name)
223
- if !node
224
- node = self.new(name, parent_node)
225
- parent_node.add_node(node)
226
- end
217
+ node = top_node
218
+
219
+ node_names.each do |name|
220
+ parent_node = node
221
+ node = parent_node.find(name)
222
+ if !node
223
+ node = self.new(name, parent_node)
224
+ parent_node.add_node(node)
227
225
  end
228
- node.add_task(task)
229
226
  end
230
-
227
+ node.add_task(task)
231
228
  end
229
+
232
230
  end
233
231
 
@@ -2,7 +2,7 @@ module Capitate #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 11
5
+ TINY = 13
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -7,9 +7,21 @@ namespace :backgroundrb do
7
7
 
8
8
  pid_file = "\#{CONFIG_FILE[:backgroundrb][:pid_file]}"
9
9
 
10
- *backgroundrb_host*: Backgroundrb host. _Defaults to 0.0.0.0_\n
11
- *backgroundrb_port*: Backgroundrb port. _Defaults to 11006_\n
12
- *backgroundrb_yml_template*: Backgroundrb yml template. _Defaults to @backgroundrb/backgroundrb.yml.erb@ in this gem.\n
10
+ <dl>
11
+ <dt>backgroundrb_host</dt>
12
+ <dd>Backgroundrb host</dd>
13
+ <dd class="default">Defaults to @0.0.0.0@</dd>
14
+
15
+ <dt>backgroundrb_port</dt>
16
+ <dd>Backgroundrb port</dd>
17
+ <dd class="default">Defaults to @11006@</dd>
18
+
19
+ <dt>backgroundrb_yml_template</dt>
20
+ <dd>Backgroundrb yml template</dd>
21
+ <dd class="default">Defaults to @backgroundrb/backgroundrb.yml.erb@ in this gem.</dd>
22
+ </dl>
23
+
24
+ "Source":#{link_to_source(__FILE__)}
13
25
  DESC
14
26
  task :setup do
15
27
  fetch_or_default(:backgroundrb_host, "0.0.0.0")
@@ -21,7 +33,9 @@ namespace :backgroundrb do
21
33
  end
22
34
 
23
35
  desc <<-DESC
24
- Symlink backgroundrb config into release path.
36
+ Symlink backgroundrb config into current path.
37
+
38
+ "Source":#{link_to_source(__FILE__)}
25
39
  DESC
26
40
  task :update_code do
27
41
  run "ln -nfs #{shared_path}/config/backgroundrb.yml #{release_path}/config/backgroundrb.yml"
@@ -5,13 +5,20 @@ namespace :backgroundrb do
5
5
  desc <<-DESC
6
6
  Setup backgroundrb for application.
7
7
 
8
- *backgroundrb_bin_path*: Path to start. _Defaults to @{current_path}/script/backgroundrb start@_\n
9
- *backgroundrb_pid_path*: Path to backgroundrb pid file. _Defaults to @{shared_path}/pids/backgroundrb.pid@_\n
8
+ <dl>
9
+ <dt>backgroundrb_bin_path</dt>
10
+ <dd>Path to start.
11
+ <dd class="default">Defaults to @\#{current_path}/script/backgroundrb -e production start@</dd>
12
+ <dt>backgroundrb_pid_path</dt>
13
+ <dd>Path to backgroundrb pid file</dd>
14
+ <dd class="default">Defaults to @\#{shared_path}/pids/backgroundrb.pid@</dd>
15
+ </dl>
16
+ "Source":#{link_to_source(__FILE__)}
10
17
  DESC
11
18
  task :setup do
12
19
 
13
20
  # Settings
14
- fetch_or_default(:backgroundrb_bin_path, "#{current_path}/script/backgroundrb -e production")
21
+ fetch_or_default(:backgroundrb_bin_path, "#{current_path}/script/backgroundrb -e production start")
15
22
  fetch_or_default(:backgroundrb_pid_path, "#{shared_path}/pids/backgroundrb.pid")
16
23
 
17
24
  # Install initscript
@@ -5,14 +5,27 @@ namespace :centos do
5
5
  desc <<-DESC
6
6
  Add user and set user password for application. Adds user to specified groups.
7
7
 
8
- *user_add*: User to add.\n
9
- @set :user_add, "app_user"@
10
- *groups*: Groups for user to be in. _Defaults to none_\n
11
- @set :groups, "admin,foo"@\n
12
- *home*: Home directory for user. _Defaults to <tt>:deploy_to</tt> setting_\n
13
- @set :home, "/var/www/apps/app_name"@\n
14
- *home_readable*: Whether home permissions are readable by all. Needed if using deploy dir as home. _Defaults to true_\n
15
- @set :home_readable, true@\n
8
+ <dl>
9
+ <dt>user_add</dt>
10
+ <dd>User to add.</dd>
11
+ <dd>@set :user_add, "app_user"@</dd>
12
+
13
+ <dt>groups</dt>
14
+ <dd>Groups for user to be in.</dd>
15
+ <dd class="default">Defaults to @nil@</dd>
16
+ <dd>@set :groups, "admin,foo"@</dd>
17
+
18
+ <dt>home</dt>
19
+ <dd>Home directory for user.</dd>
20
+ <dd class="default">Defaults to @:deploy_to@ setting_</dd>
21
+ <dd>@set :home, "/var/www/apps/app_name"@</dd>
22
+
23
+ <dt>home_readable</dt>
24
+ <dd>Whether home permissions are readable by all. Needed if using deploy dir as home.</dd>
25
+ <dd class="default">Defaults to @true@</dd>
26
+ <dd>@set :home_readable, true@</dd>
27
+ </dl>
28
+ "Source":#{link_to_source(__FILE__)}
16
29
  DESC
17
30
  task :add_user do
18
31
 
@@ -3,13 +3,16 @@ namespace :imagemagick do
3
3
 
4
4
  desc <<-DESC
5
5
  Install imagemagick.\n
6
- *imagemagick_build_options*: Imagemagick build options.
6
+ <dl><dt>imagemagick_build_options</dt><dd>Imagemagick build options</dd></dl>
7
7
  <pre>
8
+ <code class="ruby">
8
9
  set :imagemagick_build_options, {
9
10
  :url => "ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz",
10
11
  :unpack_dir => "ImageMagick-*"
11
12
  }
13
+ </code>
12
14
  </pre>
15
+ "Source":#{link_to_source(__FILE__)}
13
16
  DESC
14
17
  task :install do
15
18