alpha_omega 0.0.213 → 0.0.214

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.213
1
+ 0.0.214
data/libexec/pygmentize CHANGED
@@ -7,10 +7,10 @@
7
7
  #/ pygmentize ...
8
8
 
9
9
  # figure out the project root under which bin, lib live
10
- shome="$(cd -P -- "$(dirname -- "$0")/.." && pwd -P)"
10
+ shome="$(cd -P -- "$(dirname -- "$BASH_SOURCE")/.." && pwd -P)"
11
11
 
12
- # load a meat library
13
- source "$shome/bin/_prime" "$@"
12
+ # load a jason bourne library
13
+ source "$shome/bin/_treadstone"
14
14
 
15
15
  # entry point
16
16
  function main {
data/libexec/rocco CHANGED
@@ -7,10 +7,10 @@
7
7
  #/ rocco ...
8
8
 
9
9
  # figure out the project root under which bin, lib live
10
- shome="$(cd -P -- "$(dirname -- "$0")/.." && pwd -P)"
10
+ shome="$(cd -P -- "$(dirname -- "$BASH_SOURCE")/.." && pwd -P)"
11
11
 
12
- # load a meat library
13
- source "$shome/bin/_prime" "$@"
12
+ # load a jason bourne library
13
+ source "$shome/bin/_treadstone"
14
14
 
15
15
  # entry point
16
16
  function main {
data/libexec/shocco CHANGED
@@ -7,10 +7,10 @@
7
7
  #/ shocco ...
8
8
 
9
9
  # figure out the project root under which bin, lib live
10
- shome="$(cd -P -- "$(dirname -- "$0")/.." && pwd -P)"
10
+ shome="$(cd -P -- "$(dirname -- "$BASH_SOURCE")/.." && pwd -P)"
11
11
 
12
- # load a meat library
13
- source "$shome/bin/_prime" "$@"
12
+ # load a jason bourne library
13
+ source "$shome/bin/_treadstone"
14
14
 
15
15
  # entry point
16
16
  function main {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alpha_omega
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.213
4
+ version: 0.0.214
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -174,7 +174,6 @@ files:
174
174
  - lib/alpha_omega/deploy/strategy/remote.rb
175
175
  - lib/alpha_omega/deploy/strategy.rb
176
176
  - lib/alpha_omega/deploy/templates/maintenance.rhtml
177
- - lib/alpha_omega/deploy.html
178
177
  - lib/alpha_omega/deploy.rb
179
178
  - lib/alpha_omega/utils.rb
180
179
  - lib/alpha_omega/version.rb
@@ -1,788 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta http-equiv="content-type" content="text/html;charset=utf-8">
5
- <title>deploy.rb</title>
6
- <link rel="stylesheet" href="http://jashkenas.github.com/docco/resources/docco.css">
7
- </head>
8
- <body>
9
- <div id='container'>
10
- <div id="background"></div>
11
- <table cellspacing=0 cellpadding=0>
12
- <thead>
13
- <tr>
14
- <th class=docs><h1>deploy.rb</h1></th>
15
- <th class=code></th>
16
- </tr>
17
- </thead>
18
- <tbody>
19
- <tr id='section-1'>
20
- <td class=docs>
21
- <div class="pilwrap">
22
- <a class="pilcrow" href="#section-1">&#182;</a>
23
- </div>
24
-
25
- </td>
26
- <td class=code>
27
- <div class='highlight'><pre><span class="vg">$:</span><span class="o">.</span><span class="n">unshift</span> <span class="no">File</span><span class="o">.</span><span class="n">expand_path</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="bp">__FILE__</span><span class="p">),</span><span class="s1">&#39;..&#39;</span><span class="p">,</span><span class="s1">&#39;..&#39;</span><span class="p">,</span><span class="s1">&#39;lib&#39;</span><span class="p">))</span>
28
-
29
- <span class="nb">require</span> <span class="s1">&#39;benchmark&#39;</span>
30
- <span class="nb">require</span> <span class="s1">&#39;yaml&#39;</span>
31
- <span class="nb">require</span> <span class="s1">&#39;json&#39;</span>
32
- <span class="nb">require</span> <span class="s1">&#39;alpha_omega/deploy/scm&#39;</span>
33
- <span class="nb">require</span> <span class="s1">&#39;alpha_omega/deploy/strategy&#39;</span>
34
- <span class="nb">require</span> <span class="s1">&#39;alpha_omega/utils&#39;</span>
35
- <span class="nb">require</span> <span class="s1">&#39;capistrano_colors&#39;</span>
36
- <span class="nb">require</span> <span class="s1">&#39;capistrano/log_with_awesome&#39;</span>
37
-
38
- <span class="no">ENV</span><span class="o">[</span><span class="s2">&quot;AO_USER&quot;</span><span class="o">]</span> <span class="o">||</span> <span class="no">ENV</span><span class="o">[</span><span class="s2">&quot;AO_USER&quot;</span><span class="o">]</span> <span class="o">=</span> <span class="no">ENV</span><span class="o">[</span><span class="s2">&quot;USER&quot;</span><span class="o">]</span>
39
-
40
- <span class="no">Capistrano</span><span class="o">::</span><span class="no">Configuration</span><span class="o">.</span><span class="n">instance</span><span class="p">(</span><span class="ss">:must_exist</span><span class="p">)</span><span class="o">.</span><span class="n">load</span> <span class="k">do</span> <span class="o">|</span><span class="n">config</span><span class="o">|</span>
41
-
42
- <span class="k">def</span> <span class="nf">_cset</span><span class="p">(</span><span class="nb">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">block</span><span class="p">)</span>
43
- <span class="k">unless</span> <span class="n">exists?</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
44
- <span class="n">set</span><span class="p">(</span><span class="nb">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">block</span><span class="p">)</span>
45
- <span class="k">end</span>
46
- <span class="k">end</span></pre></div>
47
- </td>
48
- </tr>
49
- <tr id='section-the_deploy_will_fail_with_an_error.'>
50
- <td class=docs>
51
- <div class="pilwrap">
52
- <a class="pilcrow" href="#section-the_deploy_will_fail_with_an_error.">&#182;</a>
53
- </div>
54
- <h1></h1>
55
-
56
- <p>These variables MUST be set in the client capfiles. If they are not set,</p>
57
-
58
- <h1>the deploy will fail with an error.</h1>
59
- </td>
60
- <td class=code>
61
- <div class='highlight'><pre> <span class="n">_cset</span><span class="p">(</span><span class="ss">:application</span><span class="p">)</span> <span class="p">{</span> <span class="nb">abort</span> <span class="s2">&quot;Please specify the name of your application, set :application, &#39;foo&#39;&quot;</span> <span class="p">}</span>
62
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:repository</span><span class="p">)</span> <span class="p">{</span> <span class="nb">abort</span> <span class="s2">&quot;Please specify the repository that houses your application&#39;s code, set :repository, &#39;foo&#39;&quot;</span> <span class="p">}</span></pre></div>
63
- </td>
64
- </tr>
65
- <tr id='section-are_not_sufficient.'>
66
- <td class=docs>
67
- <div class="pilwrap">
68
- <a class="pilcrow" href="#section-are_not_sufficient.">&#182;</a>
69
- </div>
70
- <h1></h1>
71
-
72
- <p>These variables may be set in the client capfile if their default values</p>
73
-
74
- <h1>are not sufficient.</h1>
75
- </td>
76
- <td class=code>
77
- <div class='highlight'><pre> <span class="n">_cset</span> <span class="ss">:scm</span><span class="p">,</span> <span class="ss">:git</span>
78
- <span class="n">_cset</span> <span class="ss">:deploy_via</span><span class="p">,</span> <span class="ss">:checkout</span>
79
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:branch</span><span class="p">)</span> <span class="p">{</span> <span class="no">AlphaOmega</span><span class="o">.</span><span class="n">what_branch</span> <span class="p">}</span>
80
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:revision</span><span class="p">)</span> <span class="p">{</span> <span class="n">source</span><span class="o">.</span><span class="n">head</span> <span class="p">}</span>
81
-
82
- <span class="n">_cset</span> <span class="ss">:default_shell</span><span class="p">,</span> <span class="s2">&quot;/bin/bash&quot;</span>
83
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:deploy_to</span><span class="p">)</span> <span class="p">{</span> <span class="s2">&quot;/data/</span><span class="si">#{</span><span class="n">application</span><span class="si">}</span><span class="s2">&quot;</span> <span class="p">}</span>
84
-
85
- <span class="n">_cset</span> <span class="ss">:root_user</span><span class="p">,</span> <span class="s2">&quot;root&quot;</span>
86
- <span class="n">_cset</span> <span class="ss">:root_group</span><span class="p">,</span> <span class="s2">&quot;root&quot;</span>
87
-
88
- <span class="n">_cset</span> <span class="ss">:dir_perms</span><span class="p">,</span> <span class="s2">&quot;0775&quot;</span>
89
-
90
- <span class="n">_cset</span> <span class="ss">:bundler_options</span><span class="p">,</span> <span class="s2">&quot;--deployment --without development:test&quot;</span>
91
- <span class="n">_cset</span> <span class="ss">:ruby_loader</span><span class="p">,</span> <span class="s2">&quot;&quot;</span>
92
-
93
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:run_method</span><span class="p">)</span> <span class="p">{</span> <span class="n">fetch</span><span class="p">(</span><span class="ss">:use_sudo</span><span class="p">,</span> <span class="kp">true</span><span class="p">)</span> <span class="p">?</span> <span class="ss">:sudo</span> <span class="p">:</span> <span class="ss">:run</span> <span class="p">}</span>
94
-
95
- <span class="n">_cset</span> <span class="ss">:last_pod</span><span class="p">,</span> <span class="kp">nil</span>
96
- <span class="n">_cset</span> <span class="ss">:local_only</span><span class="p">,</span> <span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;LOCAL_ONLY&#39;</span><span class="o">]</span> <span class="p">?</span> <span class="kp">true</span> <span class="p">:</span> <span class="kp">false</span>
97
-
98
- <span class="n">_cset</span> <span class="p">(</span><span class="ss">:figlet</span><span class="p">)</span> <span class="p">{</span> <span class="o">[</span><span class="sx">%x(which figlet)</span><span class="o">.</span><span class="n">strip</span><span class="o">].</span><span class="n">reject</span> <span class="p">{</span><span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="o">!</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">executable?</span> <span class="n">f</span><span class="p">)}</span><span class="o">.</span><span class="n">first</span> <span class="o">||</span> <span class="n">echo</span> <span class="p">}</span></pre></div>
99
- </td>
100
- </tr>
101
- <tr id='section-services,_logs'>
102
- <td class=docs>
103
- <div class="pilwrap">
104
- <a class="pilcrow" href="#section-services,_logs">&#182;</a>
105
- </div>
106
- <h1></h1>
107
-
108
- <h1>services, logs</h1>
109
- </td>
110
- <td class=code>
111
- <div class='highlight'><pre> <span class="n">_cset</span> <span class="ss">:service_dir</span><span class="p">,</span> <span class="s2">&quot;service&quot;</span>
112
- <span class="n">_cset</span> <span class="ss">:log_dir</span><span class="p">,</span> <span class="s2">&quot;log&quot;</span>
113
- <span class="n">_cset</span> <span class="ss">:cache_dir</span><span class="p">,</span> <span class="s2">&quot;cache&quot;</span>
114
-
115
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:service_path</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">deploy_to</span><span class="p">,</span> <span class="n">service_dir</span><span class="p">)</span> <span class="p">}</span>
116
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:log_path</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">deploy_to</span><span class="p">,</span> <span class="n">log_dir</span><span class="p">)</span> <span class="p">}</span>
117
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:cache_path</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">deploy_to</span><span class="p">,</span> <span class="n">cache_dir</span><span class="p">)</span> <span class="p">}</span></pre></div>
118
- </td>
119
- </tr>
120
- <tr id='section-changes_if_you_do_decide_to_muck_with_these!'>
121
- <td class=docs>
122
- <div class="pilwrap">
123
- <a class="pilcrow" href="#section-changes_if_you_do_decide_to_muck_with_these!">&#182;</a>
124
- </div>
125
- <h1></h1>
126
-
127
- <p>These variables should NOT be changed unless you are very confident in
128
- what you are doing. Make sure you understand all the implications of your</p>
129
-
130
- <h1>changes if you do decide to muck with these!</h1>
131
- </td>
132
- <td class=code>
133
- <div class='highlight'><pre> <span class="n">_cset</span><span class="p">(</span><span class="ss">:source</span><span class="p">)</span> <span class="p">{</span> <span class="no">Capistrano</span><span class="o">::</span><span class="no">Deploy</span><span class="o">::</span><span class="no">SCM</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">scm</span><span class="p">,</span> <span class="nb">self</span><span class="p">)</span> <span class="p">}</span>
134
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:strategy</span><span class="p">)</span> <span class="p">{</span> <span class="no">Capistrano</span><span class="o">::</span><span class="no">Deploy</span><span class="o">::</span><span class="no">Strategy</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">deploy_via</span><span class="p">,</span> <span class="nb">self</span><span class="p">)</span> <span class="p">}</span>
135
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:real_revision</span><span class="p">)</span> <span class="p">{</span> <span class="n">source</span><span class="o">.</span><span class="n">local</span><span class="o">.</span><span class="n">query_revision</span><span class="p">(</span><span class="n">revision</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">cmd</span><span class="o">|</span> <span class="n">with_env</span><span class="p">(</span><span class="s2">&quot;LC_ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;C&quot;</span><span class="p">)</span> <span class="p">{</span> <span class="n">run_locally</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span>
136
-
137
- <span class="n">_cset</span> <span class="ss">:releases</span><span class="p">,</span> <span class="o">[</span> <span class="s2">&quot;alpha&quot;</span><span class="p">,</span> <span class="s2">&quot;beta&quot;</span><span class="p">,</span> <span class="s2">&quot;omega&quot;</span> <span class="o">]</span>
138
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:releases_dir</span><span class="p">)</span> <span class="p">{</span> <span class="n">releases</span><span class="o">.</span><span class="n">length</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="o">?</span> <span class="s2">&quot;releases&quot;</span> <span class="p">:</span> <span class="s2">&quot;&quot;</span> <span class="p">}</span>
139
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:releases_path</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">deploy_to</span><span class="p">,</span> <span class="n">releases_dir</span><span class="p">)</span> <span class="p">}</span>
140
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:current_workarea</span><span class="p">)</span> <span class="p">{</span> <span class="n">capture</span><span class="p">(</span><span class="s2">&quot;readlink </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2"> || true&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">)</span><span class="o">[-</span><span class="mi">1</span><span class="o">]</span> <span class="o">||</span> <span class="n">releases</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span> <span class="p">}</span></pre></div>
141
- </td>
142
- </tr>
143
- <tr id='section-releases,_paths,_names'>
144
- <td class=docs>
145
- <div class="pilwrap">
146
- <a class="pilcrow" href="#section-releases,_paths,_names">&#182;</a>
147
- </div>
148
- <h1></h1>
149
-
150
- <h1>releases, paths, names</h1>
151
- </td>
152
- <td class=code>
153
- <div class='highlight'><pre> <span class="n">_cset</span> <span class="ss">:previous_path_name</span><span class="p">,</span> <span class="s2">&quot;previous&quot;</span>
154
- <span class="n">_cset</span> <span class="ss">:current_path_name</span><span class="p">,</span> <span class="s2">&quot;current&quot;</span>
155
- <span class="n">_cset</span> <span class="ss">:next_path_name</span><span class="p">,</span> <span class="s2">&quot;next&quot;</span>
156
- <span class="n">_cset</span> <span class="p">(</span><span class="ss">:active_path_name</span><span class="p">)</span> <span class="p">{</span> <span class="n">current_path_name</span> <span class="p">}</span>
157
- <span class="n">_cset</span> <span class="ss">:compare_path_name</span><span class="p">,</span> <span class="s2">&quot;compare&quot;</span>
158
- <span class="n">_cset</span> <span class="ss">:migrate_path_name</span><span class="p">,</span> <span class="s2">&quot;migrate&quot;</span>
159
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:deploy_path_name</span><span class="p">)</span> <span class="p">{</span> <span class="n">current_path_name</span> <span class="p">}</span>
160
-
161
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:previous_path</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">deploy_to</span><span class="p">,</span> <span class="n">previous_path_name</span><span class="p">)</span> <span class="p">}</span>
162
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:current_path</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">deploy_to</span><span class="p">,</span> <span class="n">current_path_name</span><span class="p">)</span> <span class="p">}</span>
163
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:external_path</span><span class="p">)</span> <span class="p">{</span> <span class="n">current_path</span> <span class="p">}</span>
164
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:next_path</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">deploy_to</span><span class="p">,</span> <span class="n">next_path_name</span><span class="p">)</span> <span class="p">}</span>
165
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:compare_path</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">deploy_to</span><span class="p">,</span> <span class="n">compare_path_name</span><span class="p">)</span> <span class="p">}</span>
166
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:migrate_path</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">deploy_to</span><span class="p">,</span> <span class="n">migrate_path_name</span><span class="p">)</span> <span class="p">}</span>
167
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:deploy_path</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">deploy_to</span><span class="p">,</span> <span class="n">deploy_path_name</span><span class="p">)</span> <span class="p">}</span>
168
-
169
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:rollback_release_name</span><span class="p">)</span> <span class="p">{</span>
170
- <span class="k">if</span> <span class="n">releases</span><span class="o">.</span><span class="n">length</span> <span class="o">&gt;</span> <span class="mi">0</span>
171
- <span class="n">w</span> <span class="o">=</span> <span class="n">current_workarea</span>
172
- <span class="n">releases</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">w</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="n">releases</span><span class="o">[</span><span class="p">(</span><span class="n">releases</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">w</span><span class="p">))</span><span class="o">%</span><span class="n">releases</span><span class="o">.</span><span class="n">length</span><span class="o">]</span>
173
- <span class="k">else</span>
174
- <span class="s2">&quot;&quot;</span>
175
- <span class="k">end</span>
176
- <span class="p">}</span>
177
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:previous_release_name</span><span class="p">)</span> <span class="p">{</span>
178
- <span class="k">if</span> <span class="n">releases</span><span class="o">.</span><span class="n">length</span> <span class="o">&gt;</span> <span class="mi">0</span>
179
- <span class="n">w</span> <span class="o">=</span> <span class="n">current_workarea</span>
180
- <span class="n">releases</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">w</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="n">releases</span><span class="o">[</span><span class="p">(</span><span class="n">releases</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">w</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">%</span><span class="n">releases</span><span class="o">.</span><span class="n">length</span><span class="o">]</span>
181
- <span class="k">else</span>
182
- <span class="s2">&quot;&quot;</span>
183
- <span class="k">end</span>
184
- <span class="p">}</span>
185
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:current_release_name</span><span class="p">)</span> <span class="p">{</span>
186
- <span class="k">if</span> <span class="n">releases</span><span class="o">.</span><span class="n">length</span> <span class="o">&gt;</span> <span class="mi">0</span>
187
- <span class="n">w</span> <span class="o">=</span> <span class="n">current_workarea</span>
188
- <span class="n">stage</span> <span class="o">=</span> <span class="n">releases</span><span class="o">[</span><span class="p">((</span><span class="n">releases</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">w</span><span class="p">)?</span><span class="n">releases</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">w</span><span class="p">)</span><span class="ss">:-</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">%</span><span class="n">releases</span><span class="o">.</span><span class="n">length</span><span class="o">]</span>
189
- <span class="nb">system</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">figlet</span><span class="si">}</span><span class="s2"> -w 200 on </span><span class="si">#{</span><span class="n">stage</span><span class="si">}</span><span class="s2">&quot;</span>
190
- <span class="n">stage</span>
191
- <span class="k">else</span>
192
- <span class="s2">&quot;&quot;</span>
193
- <span class="k">end</span>
194
- <span class="p">}</span>
195
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:next_release_name</span><span class="p">)</span> <span class="p">{</span>
196
- <span class="k">if</span> <span class="n">releases</span><span class="o">.</span><span class="n">length</span> <span class="o">&gt;</span> <span class="mi">0</span>
197
- <span class="n">w</span> <span class="o">=</span> <span class="n">current_workarea</span>
198
- <span class="n">releases</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">w</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="n">releases</span><span class="o">[</span><span class="p">(</span><span class="n">releases</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">w</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">%</span><span class="n">releases</span><span class="o">.</span><span class="n">length</span><span class="o">]</span>
199
- <span class="k">else</span>
200
- <span class="s2">&quot;&quot;</span>
201
- <span class="k">end</span>
202
- <span class="p">}</span>
203
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:active_release_name</span><span class="p">)</span> <span class="p">{</span> <span class="n">current_workarea</span> <span class="p">}</span>
204
- <span class="n">_cset</span> <span class="ss">:compare_release_name</span><span class="p">,</span> <span class="n">compare_path_name</span>
205
- <span class="n">_cset</span> <span class="ss">:migrate_release_name</span><span class="p">,</span> <span class="n">migrate_path_name</span>
206
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:deploy_release_name</span><span class="p">)</span> <span class="p">{</span> <span class="n">current_release_name</span> <span class="p">}</span>
207
-
208
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:rollback_release</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">releases_path</span><span class="p">,</span> <span class="n">rollback_release_name</span><span class="p">)</span> <span class="p">}</span>
209
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:previous_release</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">releases_path</span><span class="p">,</span> <span class="n">previous_release_name</span><span class="p">)</span> <span class="p">}</span>
210
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:current_release</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">releases_path</span><span class="p">,</span> <span class="n">current_release_name</span><span class="p">)</span> <span class="p">}</span>
211
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:next_release</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">releases_path</span><span class="p">,</span> <span class="n">next_release_name</span><span class="p">)</span> <span class="p">}</span>
212
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:active_release</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">releases_path</span><span class="p">,</span> <span class="n">active_release_name</span><span class="p">)</span> <span class="p">}</span>
213
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:compare_release</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">releases_path</span><span class="p">,</span> <span class="n">compare_release_name</span><span class="p">)</span> <span class="p">}</span>
214
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:migrate_release</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">releases_path</span><span class="p">,</span> <span class="n">migrate_release_name</span><span class="p">)</span> <span class="p">}</span>
215
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:deploy_release</span><span class="p">)</span> <span class="p">{</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">releases_path</span><span class="p">,</span> <span class="n">deploy_release_name</span><span class="p">)</span> <span class="p">}</span>
216
-
217
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:rollback_revision</span><span class="p">)</span> <span class="p">{</span> <span class="n">capture</span><span class="p">(</span><span class="s2">&quot;cat </span><span class="si">#{</span><span class="n">rollback_release</span><span class="si">}</span><span class="s2">/REVISION&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span> <span class="p">}</span>
218
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:previous_revision</span><span class="p">)</span> <span class="p">{</span> <span class="n">capture</span><span class="p">(</span><span class="s2">&quot;cat </span><span class="si">#{</span><span class="n">previous_release</span><span class="si">}</span><span class="s2">/REVISION&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span> <span class="p">}</span>
219
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:current_revision</span><span class="p">)</span> <span class="p">{</span> <span class="n">capture</span><span class="p">(</span><span class="s2">&quot;cat </span><span class="si">#{</span><span class="n">current_release</span><span class="si">}</span><span class="s2">/REVISION&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span> <span class="p">}</span>
220
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:next_revision</span><span class="p">)</span> <span class="p">{</span> <span class="n">capture</span><span class="p">(</span><span class="s2">&quot;cat </span><span class="si">#{</span><span class="n">next_release</span><span class="si">}</span><span class="s2">/REVISION&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span> <span class="p">}</span>
221
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:active_revision</span><span class="p">)</span> <span class="p">{</span> <span class="n">capture</span><span class="p">(</span><span class="s2">&quot;cat </span><span class="si">#{</span><span class="n">active_release</span><span class="si">}</span><span class="s2">/REVISION&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span> <span class="p">}</span>
222
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:compare_revision</span><span class="p">)</span> <span class="p">{</span> <span class="n">capture</span><span class="p">(</span><span class="s2">&quot;cat </span><span class="si">#{</span><span class="n">compare_release</span><span class="si">}</span><span class="s2">/REVISION&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span> <span class="p">}</span>
223
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:migrate_revision</span><span class="p">)</span> <span class="p">{</span> <span class="n">capture</span><span class="p">(</span><span class="s2">&quot;cat </span><span class="si">#{</span><span class="n">migrate_release</span><span class="si">}</span><span class="s2">/REVISION&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span> <span class="p">}</span>
224
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:deploy_revision</span><span class="p">)</span> <span class="p">{</span> <span class="n">capture</span><span class="p">(</span><span class="s2">&quot;cat </span><span class="si">#{</span><span class="n">deploy_release</span><span class="si">}</span><span class="s2">/REVISION&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span> <span class="p">}</span>
225
- </pre></div>
226
- </td>
227
- </tr>
228
- <tr id='section-deploy:lock_defaults'>
229
- <td class=docs>
230
- <div class="pilwrap">
231
- <a class="pilcrow" href="#section-deploy:lock_defaults">&#182;</a>
232
- </div>
233
- <h1></h1>
234
-
235
- <h1>deploy:lock defaults</h1>
236
- </td>
237
- <td class=code>
238
- <div class='highlight'><pre> <span class="n">_cset</span><span class="p">(</span><span class="ss">:want_unlock</span><span class="p">)</span> <span class="p">{</span> <span class="kp">true</span> <span class="p">}</span>
239
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:lock_timeout</span><span class="p">)</span> <span class="p">{</span> <span class="mi">86400</span> <span class="p">}</span>
240
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:lock_name</span><span class="p">)</span> <span class="p">{</span> <span class="n">application</span> <span class="p">}</span>
241
- <span class="n">_cset</span><span class="p">(</span><span class="ss">:lock_path</span><span class="p">)</span> <span class="p">{</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">log_path</span><span class="si">}</span><span class="s2">/.</span><span class="si">#{</span><span class="n">lock_name</span><span class="si">}</span><span class="s2">_deploy_lock&quot;</span> <span class="p">}</span></pre></div>
242
- </td>
243
- </tr>
244
- <tr id='section-These_are_helper_methods_that_will_be_available_to_your_recipes.'>
245
- <td class=docs>
246
- <div class="pilwrap">
247
- <a class="pilcrow" href="#section-These_are_helper_methods_that_will_be_available_to_your_recipes.">&#182;</a>
248
- </div>
249
- <h1></h1>
250
-
251
- <h1>These are helper methods that will be available to your recipes.</h1>
252
- </td>
253
- <td class=code>
254
- <div class='highlight'><pre></pre></div>
255
- </td>
256
- </tr>
257
- <tr id='section-9'>
258
- <td class=docs>
259
- <div class="pilwrap">
260
- <a class="pilcrow" href="#section-9">&#182;</a>
261
- </div>
262
- <p>Auxiliary helper method for the deploy:check' task. Lets you set up your
263
- own dependencies.</p>
264
- </td>
265
- <td class=code>
266
- <div class='highlight'><pre> <span class="k">def</span> <span class="nf">depend</span><span class="p">(</span><span class="n">location</span><span class="p">,</span> <span class="n">type</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
267
- <span class="n">deps</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span><span class="ss">:dependencies</span><span class="p">,</span> <span class="p">{})</span>
268
- <span class="n">deps</span><span class="o">[</span><span class="n">location</span><span class="o">]</span> <span class="o">||=</span> <span class="p">{}</span>
269
- <span class="n">deps</span><span class="o">[</span><span class="n">location</span><span class="o">][</span><span class="n">type</span><span class="o">]</span> <span class="o">||=</span> <span class="o">[]</span>
270
- <span class="n">deps</span><span class="o">[</span><span class="n">location</span><span class="o">][</span><span class="n">type</span><span class="o">]</span> <span class="o">&lt;&lt;</span> <span class="n">args</span>
271
- <span class="n">set</span> <span class="ss">:dependencies</span><span class="p">,</span> <span class="n">deps</span>
272
- <span class="k">end</span></pre></div>
273
- </td>
274
- </tr>
275
- <tr id='section-10'>
276
- <td class=docs>
277
- <div class="pilwrap">
278
- <a class="pilcrow" href="#section-10">&#182;</a>
279
- </div>
280
- <p>Temporarily sets an environment variable, yields to a block, and restores
281
- the value when it is done.</p>
282
- </td>
283
- <td class=code>
284
- <div class='highlight'><pre> <span class="k">def</span> <span class="nf">with_env</span><span class="p">(</span><span class="nb">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
285
- <span class="n">saved</span><span class="p">,</span> <span class="no">ENV</span><span class="o">[</span><span class="nb">name</span><span class="o">]</span> <span class="o">=</span> <span class="no">ENV</span><span class="o">[</span><span class="nb">name</span><span class="o">]</span><span class="p">,</span> <span class="n">value</span>
286
- <span class="k">yield</span>
287
- <span class="k">ensure</span>
288
- <span class="no">ENV</span><span class="o">[</span><span class="nb">name</span><span class="o">]</span> <span class="o">=</span> <span class="n">saved</span>
289
- <span class="k">end</span></pre></div>
290
- </td>
291
- </tr>
292
- <tr id='section-11'>
293
- <td class=docs>
294
- <div class="pilwrap">
295
- <a class="pilcrow" href="#section-11">&#182;</a>
296
- </div>
297
- <p>logs the command then executes it locally.
298
- returns the command output as a string</p>
299
- </td>
300
- <td class=code>
301
- <div class='highlight'><pre> <span class="k">def</span> <span class="nf">run_locally</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
302
- <span class="n">logger</span><span class="o">.</span><span class="n">trace</span> <span class="s2">&quot;executing locally: </span><span class="si">#{</span><span class="n">cmd</span><span class="o">.</span><span class="n">inspect</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">logger</span>
303
- <span class="n">output_on_stdout</span> <span class="o">=</span> <span class="kp">nil</span>
304
- <span class="n">elapsed</span> <span class="o">=</span> <span class="no">Benchmark</span><span class="o">.</span><span class="n">realtime</span> <span class="k">do</span>
305
- <span class="n">output_on_stdout</span> <span class="o">=</span> <span class="sb">`</span><span class="si">#{</span><span class="n">cmd</span><span class="si">}</span><span class="sb">`</span>
306
- <span class="k">end</span>
307
- <span class="k">if</span> <span class="vg">$?</span><span class="o">.</span><span class="n">to_i</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="c1"># $? is command exit code (posix style)</span>
308
- <span class="k">raise</span> <span class="no">Capistrano</span><span class="o">::</span><span class="no">LocalArgumentError</span><span class="p">,</span> <span class="s2">&quot;Command </span><span class="si">#{</span><span class="n">cmd</span><span class="si">}</span><span class="s2"> returned status code </span><span class="si">#{</span><span class="vg">$?</span><span class="si">}</span><span class="s2">&quot;</span>
309
- <span class="k">end</span>
310
- <span class="n">logger</span><span class="o">.</span><span class="n">trace</span> <span class="s2">&quot;command finished in </span><span class="si">#{</span><span class="p">(</span><span class="n">elapsed</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">)</span><span class="o">.</span><span class="n">round</span><span class="si">}</span><span class="s2">ms&quot;</span> <span class="k">if</span> <span class="n">logger</span>
311
- <span class="n">output_on_stdout</span>
312
- <span class="k">end</span></pre></div>
313
- </td>
314
- </tr>
315
- <tr id='section-12'>
316
- <td class=docs>
317
- <div class="pilwrap">
318
- <a class="pilcrow" href="#section-12">&#182;</a>
319
- </div>
320
- <p>If a command is given, this will try to execute the given command, as
321
- described below. Otherwise, it will return a string for use in embedding in
322
- another command, for executing that command as described below.</p>
323
-
324
- <p>If :run<em>method is :sudo (or :use</em>sudo is true), this executes the given command
325
- via +sudo+. Otherwise is uses +run+. If :as is given as a key, it will be
326
- passed as the user to sudo as, if using sudo. If the :as key is not given,
327
- it will default to whatever the value of the :admin_runner variable is,
328
- which (by default) is unset.</p>
329
-
330
- <p>THUS, if you want to try to run something via sudo, and what to use the
331
- root user, you&rsquo;d just to try<em>sudo(&lsquo;something&rsquo;). If you wanted to try</em>sudo as
332
- someone else, you&rsquo;d just do try<em>sudo(&lsquo;something&rsquo;, :as =&gt; &ldquo;bob&rdquo;). If you
333
- always wanted sudo to run as a particular user, you could do
334
- set(:admin</em>runner, &ldquo;bob&rdquo;).</p>
335
- </td>
336
- <td class=code>
337
- <div class='highlight'><pre> <span class="k">def</span> <span class="nf">try_sudo</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
338
- <span class="n">options</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">last</span><span class="o">.</span><span class="n">is_a?</span><span class="p">(</span><span class="no">Hash</span><span class="p">)</span> <span class="p">?</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span> <span class="p">:</span> <span class="p">{}</span>
339
- <span class="n">command</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">shift</span>
340
- <span class="k">raise</span> <span class="no">ArgumentError</span><span class="p">,</span> <span class="s2">&quot;too many arguments&quot;</span> <span class="k">if</span> <span class="n">args</span><span class="o">.</span><span class="n">any?</span>
341
-
342
- <span class="n">as</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="ss">:as</span><span class="p">,</span> <span class="n">fetch</span><span class="p">(</span><span class="ss">:admin_runner</span><span class="p">,</span> <span class="kp">nil</span><span class="p">))</span>
343
- <span class="n">via</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span><span class="ss">:run_method</span><span class="p">,</span> <span class="ss">:sudo</span><span class="p">)</span>
344
- <span class="k">if</span> <span class="n">command</span>
345
- <span class="n">invoke_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="ss">:via</span> <span class="o">=&gt;</span> <span class="n">via</span><span class="p">,</span> <span class="ss">:as</span> <span class="o">=&gt;</span> <span class="n">as</span><span class="p">)</span>
346
- <span class="k">elsif</span> <span class="n">via</span> <span class="o">==</span> <span class="ss">:sudo</span>
347
- <span class="n">sudo</span><span class="p">(</span><span class="ss">:as</span> <span class="o">=&gt;</span> <span class="n">as</span><span class="p">)</span>
348
- <span class="k">else</span>
349
- <span class="s2">&quot;&quot;</span>
350
- <span class="k">end</span>
351
- <span class="k">end</span></pre></div>
352
- </td>
353
- </tr>
354
- <tr id='section-13'>
355
- <td class=docs>
356
- <div class="pilwrap">
357
- <a class="pilcrow" href="#section-13">&#182;</a>
358
- </div>
359
- <p>Same as sudo, but tries sudo with :as set to the value of the :runner
360
- variable (which defaults to &ldquo;app&rdquo;).</p>
361
- </td>
362
- <td class=code>
363
- <div class='highlight'><pre> <span class="k">def</span> <span class="nf">try_runner</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
364
- <span class="n">options</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">last</span><span class="o">.</span><span class="n">is_a?</span><span class="p">(</span><span class="no">Hash</span><span class="p">)</span> <span class="p">?</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span> <span class="p">:</span> <span class="p">{}</span>
365
- <span class="n">args</span> <span class="o">&lt;&lt;</span> <span class="n">options</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="ss">:as</span> <span class="o">=&gt;</span> <span class="n">fetch</span><span class="p">(</span><span class="ss">:runner</span><span class="p">,</span> <span class="s2">&quot;app&quot;</span><span class="p">))</span>
366
- <span class="n">try_sudo</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
367
- <span class="k">end</span></pre></div>
368
- </td>
369
- </tr>
370
- <tr id='section-You_can_have_cap_give_you_a_summary_of_them_with_cap_-T'.'>
371
- <td class=docs>
372
- <div class="pilwrap">
373
- <a class="pilcrow" href="#section-You_can_have_cap_give_you_a_summary_of_them_with_cap_-T'.">&#182;</a>
374
- </div>
375
- <h1></h1>
376
-
377
- <p>These are the tasks that are available to help with deploying web apps.</p>
378
-
379
- <h1>You can have cap give you a summary of them with cap -T'.</h1>
380
-
381
- </td>
382
- <td class=code>
383
- <div class='highlight'><pre> <span class="n">namespace</span> <span class="ss">:deploy</span> <span class="k">do</span>
384
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
385
- <span class="sh"> Deploys your project. This calls both `update&#39; and `restart&#39;. Note that \</span>
386
- <span class="sh"> this will generally only work for applications that have already been deployed \</span>
387
- <span class="sh"> once.</span>
388
- <span class="no"> DESC</span>
389
- <span class="n">task</span> <span class="ss">:default</span> <span class="k">do</span>
390
- <span class="n">update</span>
391
- <span class="n">restart</span>
392
- <span class="k">end</span>
393
-
394
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
395
- <span class="sh"> Copies your project and updates the symlink. It does this in a \</span>
396
- <span class="sh"> transaction, so that if either `update_code&#39; or `symlink&#39; fail, all \</span>
397
- <span class="sh"> changes made to the remote servers will be rolled back, leaving your \</span>
398
- <span class="sh"> system in the same state it was in before `update&#39; was invoked. Usually, \</span>
399
- <span class="sh"> you will want to call `deploy&#39; instead of `update&#39;, but `update&#39; can be \</span>
400
- <span class="sh"> handy if you want to deploy, but not immediately restart your application.</span>
401
- <span class="no"> DESC</span>
402
- <span class="n">task</span> <span class="ss">:update</span> <span class="k">do</span>
403
- <span class="n">transaction</span> <span class="k">do</span>
404
- <span class="n">update_code</span>
405
- <span class="n">symlink</span>
406
- <span class="k">end</span>
407
- <span class="k">end</span>
408
-
409
- <span class="n">task</span> <span class="ss">:bootstrap_code</span> <span class="k">do</span>
410
- <span class="k">if</span> <span class="n">releases</span><span class="o">.</span><span class="n">length</span> <span class="o">&lt;</span> <span class="mi">2</span> <span class="c1"># without services and run as root</span>
411
- <span class="n">run</span> <span class="s2">&quot;[[ -d </span><span class="si">#{</span><span class="n">deploy_to</span><span class="si">}</span><span class="s2"> ]] || </span><span class="si">#{</span><span class="n">try_sudo</span><span class="si">}</span><span class="s2"> install -d -m </span><span class="si">#{</span><span class="n">dir_perms</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">try_sudo</span><span class="o">.</span><span class="n">empty?</span> <span class="p">?</span> <span class="s1">&#39;&#39;</span> <span class="p">:</span> <span class="s2">&quot;-o </span><span class="si">#{</span><span class="n">root_user</span><span class="si">}</span><span class="s2"> -g </span><span class="si">#{</span><span class="n">root_group</span><span class="si">}</span><span class="s2">&quot;</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">deploy_to</span><span class="si">}</span><span class="s2">&quot;</span>
412
- <span class="n">run</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">try_sudo</span><span class="si">}</span><span class="s2"> install -d -m </span><span class="si">#{</span><span class="n">dir_perms</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">try_sudo</span><span class="o">.</span><span class="n">empty?</span> <span class="p">?</span> <span class="s1">&#39;&#39;</span> <span class="p">:</span> <span class="s2">&quot;-o </span><span class="si">#{</span><span class="n">user</span><span class="si">}</span><span class="s2"> -g </span><span class="si">#{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">releases_path</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">deploy_to</span><span class="si">}</span><span class="s2">/log&quot;</span>
413
- <span class="k">else</span>
414
- <span class="n">dirs</span> <span class="o">=</span> <span class="o">[</span> <span class="n">releases_path</span><span class="p">,</span> <span class="n">service_path</span><span class="p">,</span> <span class="n">log_path</span><span class="p">,</span> <span class="n">cache_path</span> <span class="o">]</span>
415
- <span class="n">dir_args</span> <span class="o">=</span> <span class="n">dirs</span><span class="o">.</span><span class="n">map</span> <span class="p">{</span><span class="o">|</span><span class="n">d</span><span class="o">|</span> <span class="n">d</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">#{</span><span class="n">deploy_to</span><span class="si">}</span><span class="s2">/&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span> <span class="p">}</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
416
- <span class="n">run</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">try_sudo</span><span class="si">}</span><span class="s2"> install -d -m </span><span class="si">#{</span><span class="n">dir_perms</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">try_sudo</span><span class="o">.</span><span class="n">empty?</span> <span class="p">?</span> <span class="s1">&#39;&#39;</span> <span class="p">:</span> <span class="s2">&quot;-o </span><span class="si">#{</span><span class="n">user</span><span class="si">}</span><span class="s2"> -g </span><span class="si">#{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">deploy_to</span><span class="si">}</span><span class="s2">&quot;</span>
417
- <span class="n">run</span> <span class="s2">&quot;cd </span><span class="si">#{</span><span class="n">deploy_to</span><span class="si">}</span><span class="s2"> &amp;&amp; install -d -m </span><span class="si">#{</span><span class="n">dir_perms</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">dir_args</span><span class="si">}</span><span class="s2">&quot;</span>
418
- <span class="k">end</span>
419
- <span class="k">end</span>
420
-
421
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
422
- <span class="sh"> Copies your project to the remote servers. This is the first stage \</span>
423
- <span class="sh"> of any deployment; moving your updated code and assets to the deployment \</span>
424
- <span class="sh"> servers. You will rarely call this task directly, however; instead, you \</span>
425
- <span class="sh"> should call the `deploy&#39; task (to do a complete deploy) or the `update&#39; \</span>
426
- <span class="sh"> task (if you want to perform the `restart&#39; task separately).</span>
427
- <span class="no"> DESC</span>
428
- <span class="n">task</span> <span class="ss">:update_code</span> <span class="k">do</span>
429
- <span class="n">bootstrap_code</span>
430
- <span class="n">strategy</span><span class="o">.</span><span class="n">deploy!</span>
431
- <span class="n">bundle</span>
432
- <span class="n">cook</span>
433
- <span class="k">end</span>
434
-
435
- <span class="n">task</span> <span class="ss">:symlink_next</span> <span class="k">do</span>
436
- <span class="k">if</span> <span class="n">releases</span><span class="o">.</span><span class="n">length</span> <span class="o">&gt;=</span> <span class="mi">2</span>
437
- <span class="n">run</span> <span class="s2">&quot;ln -nfs </span><span class="si">#{</span><span class="n">current_release</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">next_path</span><span class="si">}</span><span class="s2">.new&quot;</span>
438
- <span class="n">run</span> <span class="s2">&quot;mv -T </span><span class="si">#{</span><span class="n">next_path</span><span class="si">}</span><span class="s2">.new </span><span class="si">#{</span><span class="n">next_path</span><span class="si">}</span><span class="s2">&quot;</span>
439
- <span class="k">end</span>
440
- <span class="k">end</span>
441
-
442
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
443
- <span class="sh"> Updates the symlink to the most recently deployed version. Capistrano works \</span>
444
- <span class="sh"> by putting each new release of your application in its own directory. When \</span>
445
- <span class="sh"> you deploy a new version, this task&#39;s job is to update the `current&#39; symlink \</span>
446
- <span class="sh"> to point at the new version. You will rarely need to call this task \</span>
447
- <span class="sh"> directly; instead, use the `deploy&#39; task (which performs a complete \</span>
448
- <span class="sh"> deploy, including `restart&#39;) or the &#39;update&#39; task (which does everything \</span>
449
- <span class="sh"> except `restart&#39;).</span>
450
- <span class="no"> DESC</span>
451
- <span class="n">task</span> <span class="ss">:symlink</span> <span class="k">do</span>
452
- <span class="k">if</span> <span class="n">releases</span><span class="o">.</span><span class="n">length</span> <span class="o">&gt;</span> <span class="mi">0</span>
453
- <span class="n">on_rollback</span> <span class="k">do</span>
454
- <span class="k">if</span> <span class="n">rollback_release</span>
455
- <span class="n">run</span> <span class="s2">&quot;rm -f </span><span class="si">#{</span><span class="n">previous_path</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">next_path</span><span class="si">}</span><span class="s2">&quot;</span>
456
- <span class="n">run</span> <span class="s2">&quot;ln -nfs </span><span class="si">#{</span><span class="n">rollback_release</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">.new&quot;</span>
457
- <span class="n">run</span> <span class="s2">&quot;mv -T </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">.new </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">&quot;</span>
458
- <span class="k">else</span>
459
- <span class="n">logger</span><span class="o">.</span><span class="n">important</span> <span class="s2">&quot;no previous release to rollback to, rollback of symlink skipped&quot;</span>
460
- <span class="k">end</span>
461
- <span class="k">end</span>
462
-
463
- <span class="k">if</span> <span class="n">releases</span><span class="o">.</span><span class="n">length</span> <span class="o">==</span> <span class="mi">1</span>
464
- <span class="n">run</span> <span class="s2">&quot;ln -nfs </span><span class="si">#{</span><span class="n">current_release</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">.new&quot;</span>
465
- <span class="n">run</span> <span class="s2">&quot;mv -T </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">.new </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">&quot;</span>
466
- <span class="k">else</span>
467
- <span class="n">run</span> <span class="s2">&quot;rm -f </span><span class="si">#{</span><span class="n">previous_path</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">next_path</span><span class="si">}</span><span class="s2">&quot;</span>
468
- <span class="n">run</span> <span class="s2">&quot;ln -nfs </span><span class="si">#{</span><span class="n">current_release</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">.new&quot;</span>
469
- <span class="n">run</span> <span class="s2">&quot;mv -T </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">.new </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">&quot;</span>
470
- <span class="k">if</span> <span class="n">current_path</span> <span class="o">!=</span> <span class="n">external_path</span>
471
- <span class="n">run</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">File</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">external_path</span><span class="p">)</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">deploy_to</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">?</span> <span class="s2">&quot;&quot;</span> <span class="p">:</span> <span class="n">try_sudo</span><span class="si">}</span><span class="s2"> ln -nfs </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">external_path</span><span class="si">}</span><span class="s2">.new&quot;</span>
472
- <span class="n">run</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">File</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">external_path</span><span class="p">)</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">deploy_to</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">?</span> <span class="s2">&quot;&quot;</span> <span class="p">:</span> <span class="n">try_sudo</span><span class="si">}</span><span class="s2"> mv -T </span><span class="si">#{</span><span class="n">external_path</span><span class="si">}</span><span class="s2">.new </span><span class="si">#{</span><span class="n">external_path</span><span class="si">}</span><span class="s2">&quot;</span>
473
- <span class="k">end</span>
474
- <span class="n">run</span> <span class="s2">&quot;ln -nfs </span><span class="si">#{</span><span class="n">rollback_release</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">previous_path</span><span class="si">}</span><span class="s2">.new&quot;</span>
475
- <span class="n">run</span> <span class="s2">&quot;mv -T </span><span class="si">#{</span><span class="n">previous_path</span><span class="si">}</span><span class="s2">.new </span><span class="si">#{</span><span class="n">previous_path</span><span class="si">}</span><span class="s2">&quot;</span>
476
- <span class="k">end</span>
477
-
478
- <span class="nb">system</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">figlet</span><span class="si">}</span><span class="s2"> -w 200 </span><span class="si">#{</span><span class="n">current_release_name</span><span class="si">}</span><span class="s2"> activated&quot;</span>
479
- <span class="k">end</span>
480
- <span class="k">end</span>
481
-
482
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
483
- <span class="sh"> Copy files to the currently deployed version. This is useful for updating \</span>
484
- <span class="sh"> files piecemeal, such as when you need to quickly deploy only a single \</span>
485
- <span class="sh"> file. Some files, such as updated templates, images, or stylesheets, \</span>
486
- <span class="sh"> might not require a full deploy, and especially in emergency situations \</span>
487
- <span class="sh"> it can be handy to just push the updates to production, quickly.</span>
488
-
489
- <span class="sh"> To use this task, specify the files and directories you want to copy as a \</span>
490
- <span class="sh"> comma-delimited list in the FILES environment variable. All directories \</span>
491
- <span class="sh"> will be processed recursively, with all files being pushed to the \</span>
492
- <span class="sh"> deployment servers.</span>
493
-
494
- <span class="sh"> $ cap deploy:upload FILES=templates,controller.rb</span>
495
-
496
- <span class="sh"> Dir globs are also supported:</span>
497
-
498
- <span class="sh"> $ cap deploy:upload FILES=&#39;config/apache/*.conf&#39;</span>
499
- <span class="no"> DESC</span>
500
- <span class="n">task</span> <span class="ss">:upload</span> <span class="k">do</span>
501
- <span class="n">files</span> <span class="o">=</span> <span class="p">(</span><span class="no">ENV</span><span class="o">[</span><span class="s2">&quot;FILES&quot;</span><span class="o">]</span> <span class="o">||</span> <span class="s2">&quot;&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">map</span> <span class="p">{</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="no">Dir</span><span class="o">[</span><span class="n">f</span><span class="o">.</span><span class="n">strip</span><span class="o">]</span> <span class="p">}</span><span class="o">.</span><span class="n">flatten</span>
502
- <span class="nb">abort</span> <span class="s2">&quot;Please specify at least one file or directory to update (via the FILES environment variable)&quot;</span> <span class="k">if</span> <span class="n">files</span><span class="o">.</span><span class="n">empty?</span>
503
-
504
- <span class="n">files</span><span class="o">.</span><span class="n">each</span> <span class="p">{</span> <span class="o">|</span><span class="n">file</span><span class="o">|</span> <span class="n">top</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">deploy_path</span><span class="p">,</span> <span class="n">file</span><span class="p">))</span> <span class="p">}</span>
505
- <span class="k">end</span>
506
-
507
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
508
- <span class="sh"> Restarts your application.</span>
509
- <span class="no"> DESC</span>
510
- <span class="n">task</span> <span class="ss">:restart</span> <span class="k">do</span>
511
- <span class="k">end</span>
512
-
513
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
514
- <span class="sh"> Builds binaries (like assets, jars, format conversions for distribution</span>
515
- <span class="sh"> by deploy:dist.</span>
516
- <span class="no"> DESC</span>
517
- <span class="n">task</span> <span class="ss">:build</span> <span class="k">do</span>
518
- <span class="k">end</span>
519
-
520
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
521
- <span class="sh"> Distribute binaries built in deploy:build.</span>
522
- <span class="no"> DESC</span>
523
- <span class="n">task</span> <span class="ss">:dist</span> <span class="k">do</span>
524
- <span class="k">end</span>
525
-
526
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
527
- <span class="sh"> Checkpoint for various language bundlers</span>
528
- <span class="no"> DESC</span>
529
- <span class="n">task</span> <span class="ss">:bundle</span> <span class="k">do</span>
530
- <span class="k">end</span>
531
-
532
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
533
- <span class="sh"> Apply microwave tvdinners to a release directory.</span>
534
- <span class="no"> DESC</span>
535
- <span class="n">task</span> <span class="ss">:cook</span> <span class="k">do</span>
536
- <span class="k">end</span>
537
-
538
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
539
- <span class="sh"> Compares your application.</span>
540
- <span class="no"> DESC</span>
541
- <span class="n">task</span> <span class="ss">:compare</span> <span class="k">do</span>
542
- <span class="n">set</span> <span class="ss">:deploy_path_name</span><span class="p">,</span> <span class="s2">&quot;compare&quot;</span>
543
- <span class="n">set</span> <span class="ss">:deploy_release_name</span><span class="p">,</span> <span class="s2">&quot;compare&quot;</span>
544
- <span class="n">update_code</span>
545
- <span class="n">run</span> <span class="s2">&quot;ln -nfs </span><span class="si">#{</span><span class="n">deploy_release</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">deploy_path</span><span class="si">}</span><span class="s2">.new&quot;</span>
546
- <span class="n">run</span> <span class="s2">&quot;mv -T </span><span class="si">#{</span><span class="n">deploy_path</span><span class="si">}</span><span class="s2">.new </span><span class="si">#{</span><span class="n">deploy_path</span><span class="si">}</span><span class="s2">&quot;</span>
547
- <span class="k">end</span>
548
-
549
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
550
- <span class="sh"> Runs a repl in the compare release</span>
551
- <span class="no"> DESC</span>
552
- <span class="n">task</span> <span class="ss">:repl</span> <span class="k">do</span>
553
- <span class="n">set</span> <span class="ss">:deploy_path_name</span><span class="p">,</span> <span class="s2">&quot;compare&quot;</span>
554
- <span class="n">set</span> <span class="ss">:deploy_release_name</span><span class="p">,</span> <span class="s2">&quot;compare&quot;</span>
555
- <span class="n">update_code</span>
556
- <span class="n">run</span> <span class="s2">&quot;ln -nfs </span><span class="si">#{</span><span class="n">deploy_release</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">deploy_path</span><span class="si">}</span><span class="s2">.new&quot;</span>
557
- <span class="n">run</span> <span class="s2">&quot;mv -T </span><span class="si">#{</span><span class="n">deploy_path</span><span class="si">}</span><span class="s2">.new </span><span class="si">#{</span><span class="n">deploy_path</span><span class="si">}</span><span class="s2">&quot;</span>
558
- <span class="k">end</span>
559
-
560
- <span class="n">namespace</span> <span class="ss">:rollback</span> <span class="k">do</span>
561
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
562
- <span class="sh"> [internal] Points the current symlink at the previous revision.</span>
563
- <span class="sh"> This is called by the rollback sequence, and should rarely (if</span>
564
- <span class="sh"> ever) need to be called directly.</span>
565
- <span class="no"> DESC</span>
566
- <span class="n">task</span> <span class="ss">:revision</span> <span class="k">do</span>
567
- <span class="k">if</span> <span class="n">previous_release</span>
568
- <span class="nb">system</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">figlet</span><span class="si">}</span><span class="s2"> -w 200 on </span><span class="si">#{</span><span class="n">previous_release_name</span><span class="si">}</span><span class="s2">&quot;</span>
569
- <span class="n">run</span> <span class="s2">&quot;rm -f </span><span class="si">#{</span><span class="n">previous_path</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">next_path</span><span class="si">}</span><span class="s2">&quot;</span>
570
- <span class="n">run</span> <span class="s2">&quot;ln -nfs </span><span class="si">#{</span><span class="n">previous_release</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">.new&quot;</span>
571
- <span class="n">run</span> <span class="s2">&quot;mv -T </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">.new </span><span class="si">#{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">&quot;</span>
572
- <span class="k">else</span>
573
- <span class="nb">system</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">figlet</span><span class="si">}</span><span class="s2"> -w 200 failed to rollback&quot;</span>
574
- <span class="nb">abort</span> <span class="s2">&quot;could not rollback the code because there is no prior release&quot;</span>
575
- <span class="k">end</span>
576
- <span class="k">end</span>
577
-
578
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
579
- <span class="sh"> [internal] Removes the most recently deployed release.</span>
580
- <span class="sh"> This is called by the rollback sequence, and should rarely</span>
581
- <span class="sh"> (if ever) need to be called directly.</span>
582
- <span class="no"> DESC</span>
583
- <span class="n">task</span> <span class="ss">:cleanup</span> <span class="k">do</span>
584
- <span class="k">end</span>
585
-
586
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
587
- <span class="sh"> Rolls back to the previously deployed version. The `current&#39; symlink will \</span>
588
- <span class="sh"> be updated to point at the previously deployed version, and then the \</span>
589
- <span class="sh"> current release will be removed from the servers. You&#39;ll generally want \</span>
590
- <span class="sh"> to call `rollback&#39; instead, as it performs a `restart&#39; as well.</span>
591
- <span class="no"> DESC</span>
592
- <span class="n">task</span> <span class="ss">:code</span> <span class="k">do</span>
593
- <span class="n">revision</span>
594
- <span class="n">cleanup</span>
595
- <span class="k">end</span>
596
-
597
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
598
- <span class="sh"> Rolls back to a previous version and restarts. This is handy if you ever \</span>
599
- <span class="sh"> discover that you&#39;ve deployed a lemon; `cap rollback&#39; and you&#39;re right \</span>
600
- <span class="sh"> back where you were, on the previously deployed version.</span>
601
- <span class="no"> DESC</span>
602
- <span class="n">task</span> <span class="ss">:default</span> <span class="k">do</span>
603
- <span class="n">revision</span>
604
- <span class="n">restart</span>
605
- <span class="n">cleanup</span>
606
- <span class="k">end</span>
607
- <span class="k">end</span>
608
-
609
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
610
- <span class="sh"> Override in deploy recipes. Formerly a railsy rake db:migrate.</span>
611
- <span class="no"> DESC</span>
612
- <span class="n">task</span> <span class="ss">:migrate</span> <span class="k">do</span>
613
- <span class="n">set</span> <span class="ss">:deploy_path_name</span><span class="p">,</span> <span class="s2">&quot;migrate&quot;</span>
614
- <span class="n">set</span> <span class="ss">:deploy_release_name</span><span class="p">,</span> <span class="s2">&quot;migrate&quot;</span>
615
- <span class="n">update_code</span>
616
- <span class="n">run</span> <span class="s2">&quot;ln -nfs </span><span class="si">#{</span><span class="n">deploy_release</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">deploy_path</span><span class="si">}</span><span class="s2">.new&quot;</span>
617
- <span class="n">run</span> <span class="s2">&quot;mv -T </span><span class="si">#{</span><span class="n">deploy_path</span><span class="si">}</span><span class="s2">.new </span><span class="si">#{</span><span class="n">deploy_path</span><span class="si">}</span><span class="s2">&quot;</span>
618
- <span class="k">end</span>
619
-
620
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
621
- <span class="sh"> Test deployment dependencies. Checks things like directory permissions, \</span>
622
- <span class="sh"> necessary utilities, and so forth, reporting on the things that appear to \</span>
623
- <span class="sh"> be incorrect or missing. This is good for making sure a deploy has a \</span>
624
- <span class="sh"> chance of working before you actually run `cap deploy&#39;.</span>
625
-
626
- <span class="sh"> You can define your own dependencies, as well, using the `depend&#39; method:</span>
627
-
628
- <span class="sh"> depend :remote, :gem, &quot;tzinfo&quot;, &quot;&gt;=0.3.3&quot;</span>
629
- <span class="sh"> depend :local, :command, &quot;svn&quot;</span>
630
- <span class="sh"> depend :remote, :directory, &quot;/u/depot/files&quot;</span>
631
- <span class="no"> DESC</span>
632
- <span class="n">task</span> <span class="ss">:check</span> <span class="k">do</span>
633
- <span class="n">dependencies</span> <span class="o">=</span> <span class="n">strategy</span><span class="o">.</span><span class="n">check!</span>
634
-
635
- <span class="n">other</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span><span class="ss">:dependencies</span><span class="p">,</span> <span class="p">{})</span>
636
- <span class="n">other</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">location</span><span class="p">,</span> <span class="n">types</span><span class="o">|</span>
637
- <span class="n">types</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">type</span><span class="p">,</span> <span class="n">calls</span><span class="o">|</span>
638
- <span class="k">if</span> <span class="n">type</span> <span class="o">==</span> <span class="ss">:gem</span>
639
- <span class="n">dependencies</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">location</span><span class="p">)</span><span class="o">.</span><span class="n">command</span><span class="p">(</span><span class="n">fetch</span><span class="p">(</span><span class="ss">:gem_command</span><span class="p">,</span> <span class="s2">&quot;gem&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">or</span><span class="p">(</span><span class="s2">&quot;`gem&#39; command could not be found. Try setting :gem_command&quot;</span><span class="p">)</span>
640
- <span class="k">end</span>
641
-
642
- <span class="n">calls</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">args</span><span class="o">|</span>
643
- <span class="n">dependencies</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">location</span><span class="p">)</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">type</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
644
- <span class="k">end</span>
645
- <span class="k">end</span>
646
- <span class="k">end</span>
647
-
648
- <span class="k">if</span> <span class="n">dependencies</span><span class="o">.</span><span class="n">pass?</span>
649
- <span class="nb">puts</span> <span class="s2">&quot;You appear to have all necessary dependencies installed&quot;</span>
650
- <span class="k">else</span>
651
- <span class="nb">puts</span> <span class="s2">&quot;The following dependencies failed. Please check them and try again:&quot;</span>
652
- <span class="n">dependencies</span><span class="o">.</span><span class="n">reject</span> <span class="p">{</span> <span class="o">|</span><span class="n">d</span><span class="o">|</span> <span class="n">d</span><span class="o">.</span><span class="n">pass?</span> <span class="p">}</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">d</span><span class="o">|</span>
653
- <span class="nb">puts</span> <span class="s2">&quot;--&gt; </span><span class="si">#{</span><span class="n">d</span><span class="o">.</span><span class="n">message</span><span class="si">}</span><span class="s2">&quot;</span>
654
- <span class="k">end</span>
655
- <span class="nb">abort</span>
656
- <span class="k">end</span>
657
- <span class="k">end</span>
658
-
659
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
660
- <span class="sh"> Start the application servers.</span>
661
- <span class="no"> DESC</span>
662
- <span class="n">task</span> <span class="ss">:start</span> <span class="k">do</span>
663
- <span class="k">end</span>
664
-
665
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
666
- <span class="sh"> Stop the application servers.</span>
667
- <span class="no"> DESC</span>
668
- <span class="n">task</span> <span class="ss">:stop</span> <span class="k">do</span>
669
- <span class="k">end</span>
670
-
671
- <span class="n">namespace</span> <span class="ss">:pending</span> <span class="k">do</span>
672
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
673
- <span class="sh"> Displays the `diff&#39; since your last deploy. This is useful if you want \</span>
674
- <span class="sh"> to examine what changes are about to be deployed. Note that this might \</span>
675
- <span class="sh"> not be supported on all SCM&#39;s.</span>
676
- <span class="no"> DESC</span>
677
- <span class="n">task</span> <span class="ss">:diff</span> <span class="k">do</span>
678
- <span class="nb">system</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">local</span><span class="o">.</span><span class="n">diff</span><span class="p">(</span><span class="n">current_revision</span><span class="p">))</span>
679
- <span class="k">end</span>
680
-
681
- <span class="n">desc</span> <span class="o">&lt;&lt;-</span><span class="no">DESC</span>
682
- <span class="sh"> Displays the commits since your last deploy. This is good for a summary \</span>
683
- <span class="sh"> of the changes that have occurred since the last deploy. Note that this \</span>
684
- <span class="sh"> might not be supported on all SCM&#39;s.</span>
685
- <span class="no"> DESC</span>
686
- <span class="n">task</span> <span class="ss">:default</span> <span class="k">do</span>
687
- <span class="n">from</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">next_revision</span><span class="p">(</span><span class="n">current_revision</span><span class="p">)</span>
688
- <span class="nb">system</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">local</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">from</span><span class="p">))</span>
689
- <span class="k">end</span>
690
- <span class="k">end</span>
691
-
692
- <span class="n">task</span> <span class="ss">:lock</span> <span class="k">do</span>
693
- <span class="n">bootstrap_code</span>
694
-
695
- <span class="n">epoch</span> <span class="o">=</span> <span class="no">Time</span><span class="o">.</span><span class="n">now</span><span class="o">.</span><span class="n">to_i</span>
696
- <span class="n">locker</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
697
-
698
- <span class="n">run</span> <span class="s2">&quot;cat </span><span class="si">#{</span><span class="n">lock_path</span><span class="si">}</span><span class="s2"> 2&gt;&amp;- || true&quot;</span> <span class="k">do</span> <span class="o">|</span><span class="n">ch</span><span class="p">,</span> <span class="n">stream</span><span class="p">,</span> <span class="n">data</span><span class="o">|</span>
699
- <span class="n">locker</span> <span class="o">&lt;&lt;</span> <span class="n">data</span>
700
- <span class="k">end</span>
701
-
702
- <span class="k">if</span> <span class="o">!</span><span class="n">locker</span><span class="o">.</span><span class="n">empty?</span>
703
- <span class="n">lock_epoch</span> <span class="o">=</span> <span class="n">locker</span><span class="o">.</span><span class="n">split</span><span class="o">[</span><span class="mi">0</span><span class="o">].</span><span class="n">to_i</span>
704
- <span class="n">lock_user</span> <span class="o">=</span> <span class="n">locker</span><span class="o">.</span><span class="n">split</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span>
705
-
706
- <span class="n">lock_elasped</span> <span class="o">=</span> <span class="n">epoch</span><span class="o">-</span><span class="n">lock_epoch</span>
707
-
708
- <span class="k">if</span> <span class="n">lock_elasped</span> <span class="o">&lt;</span> <span class="n">lock_timeout</span>
709
- <span class="kp">true</span> <span class="c1"># don&#39;t do anything if lock times out, just advise unlock</span>
710
- <span class="k">end</span>
711
-
712
- <span class="nb">system</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">figlet</span><span class="si">}</span><span class="s2"> failed to lock&quot;</span>
713
- <span class="nb">puts</span> <span class="s2">&quot;deploy locked by </span><span class="si">#{</span><span class="n">lock_user</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">epoch</span><span class="o">-</span><span class="n">lock_epoch</span><span class="si">}</span><span class="s2"> seconds ago&quot;</span>
714
- <span class="nb">puts</span> <span class="s2">&quot;use bin/unlock to remove this lock&quot;</span>
715
- <span class="nb">abort</span>
716
- <span class="k">end</span>
717
-
718
- <span class="n">run_script</span> <span class="o">=</span> <span class="o">&lt;&lt;-</span><span class="no">SCRIPT</span>
719
- <span class="sh"> echo #{epoch} #{ENV[&#39;AO_USER&#39;]} &gt; #{lock_path};</span>
720
- <span class="no"> SCRIPT</span>
721
-
722
- <span class="k">if</span> <span class="n">want_unlock</span>
723
- <span class="nb">at_exit</span> <span class="p">{</span> <span class="nb">self</span><span class="o">.</span><span class="n">unlock</span><span class="p">;</span> <span class="p">}</span>
724
- <span class="k">end</span>
725
-
726
- <span class="n">run</span> <span class="n">run_script</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/[\n\r]+[ \t]+/</span><span class="p">,</span> <span class="s2">&quot; &quot;</span><span class="p">)</span>
727
- <span class="k">end</span>
728
-
729
- <span class="n">task</span> <span class="ss">:lock_compare</span> <span class="k">do</span>
730
- <span class="n">set</span> <span class="ss">:lock_name</span><span class="p">,</span> <span class="ss">:compare</span>
731
- <span class="n">lock</span>
732
- <span class="k">end</span>
733
-
734
- <span class="n">task</span> <span class="ss">:lock_migrate</span> <span class="k">do</span>
735
- <span class="n">set</span> <span class="ss">:lock_name</span><span class="p">,</span> <span class="ss">:migrate</span>
736
- <span class="n">lock</span>
737
- <span class="k">end</span>
738
-
739
- <span class="n">task</span> <span class="ss">:dont_unlock</span> <span class="k">do</span>
740
- <span class="n">set</span> <span class="ss">:want_unlock</span><span class="p">,</span> <span class="kp">false</span>
741
- <span class="k">end</span>
742
-
743
- <span class="n">task</span> <span class="ss">:unlock_compare</span> <span class="k">do</span>
744
- <span class="n">set</span> <span class="ss">:lock_name</span><span class="p">,</span> <span class="ss">:compare</span>
745
- <span class="n">unlock</span>
746
- <span class="k">end</span>
747
-
748
- <span class="n">task</span> <span class="ss">:unlock_migrate</span> <span class="k">do</span>
749
- <span class="n">set</span> <span class="ss">:lock_name</span><span class="p">,</span> <span class="ss">:migrate</span>
750
- <span class="n">unlock</span>
751
- <span class="k">end</span>
752
-
753
- <span class="n">task</span> <span class="ss">:unlock</span> <span class="k">do</span>
754
- <span class="k">if</span> <span class="n">want_unlock</span>
755
- <span class="n">run</span> <span class="s2">&quot;rm -f </span><span class="si">#{</span><span class="n">lock_path</span><span class="si">}</span><span class="s2">&quot;</span>
756
- <span class="k">end</span>
757
- <span class="k">end</span>
758
-
759
- <span class="k">end</span> <span class="c1"># :deploy</span>
760
-
761
- <span class="n">namespace</span> <span class="ss">:ruby</span> <span class="k">do</span>
762
- <span class="n">task</span> <span class="ss">:bundle</span> <span class="k">do</span>
763
- <span class="n">run</span> <span class="s2">&quot;cd </span><span class="si">#{</span><span class="n">deploy_release</span><span class="si">}</span><span class="s2"> &amp;&amp; bin/bundle-ruby </span><span class="si">#{</span><span class="n">ruby_loader</span><span class="si">}</span><span class="s2"> -- </span><span class="si">#{</span><span class="n">bundler_options</span><span class="si">}</span><span class="s2">&quot;</span>
764
- <span class="k">end</span>
765
- <span class="k">end</span>
766
-
767
- <span class="n">after</span> <span class="s2">&quot;deploy:bundle&quot;</span><span class="p">,</span> <span class="s2">&quot;ruby:bundle&quot;</span>
768
-
769
- <span class="n">namespace</span> <span class="ss">:node</span> <span class="k">do</span>
770
- <span class="n">task</span> <span class="ss">:bundle</span> <span class="k">do</span>
771
- <span class="n">run</span> <span class="s2">&quot;cd </span><span class="si">#{</span><span class="n">deploy_release</span><span class="si">}</span><span class="s2"> &amp;&amp; bin/bundle-node&quot;</span>
772
- <span class="k">end</span>
773
- <span class="k">end</span>
774
-
775
- <span class="n">after</span> <span class="s2">&quot;deploy:bundle&quot;</span><span class="p">,</span> <span class="s2">&quot;node:bundle&quot;</span>
776
-
777
- <span class="n">on</span> <span class="ss">:exit</span> <span class="k">do</span>
778
- <span class="k">unless</span> <span class="n">local_only</span>
779
- <span class="n">put</span> <span class="n">full_log</span><span class="p">,</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">log_path</span><span class="si">}</span><span class="s2">/</span><span class="si">#{</span><span class="n">application</span><span class="si">}</span><span class="s2">-</span><span class="si">#{</span><span class="no">ENV</span><span class="o">[</span><span class="s2">&quot;AO_USER&quot;</span><span class="o">]</span><span class="si">}</span><span class="s2">.log-</span><span class="si">#{</span><span class="no">Time</span><span class="o">.</span><span class="n">now</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y%m%d-%H%M&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
780
- <span class="k">end</span>
781
- <span class="k">end</span>
782
-
783
- <span class="k">end</span> <span class="c1"># Capistrano::Configuration</span></pre></div>
784
- </td>
785
- </tr>
786
- </table>
787
- </div>
788
- </body>