alpha_omega 0.0.213 → 0.0.214

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/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>