recap 0.2.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. data/.gitignore +2 -1
  2. data/README.md +55 -10
  3. data/Rakefile +19 -5
  4. data/bin/recap +2 -2
  5. data/features/managing-processes.feature +1 -1
  6. data/features/setting-environment-variables.feature +26 -1
  7. data/features/steps/capistrano_steps.rb +10 -6
  8. data/features/support/project.rb +24 -5
  9. data/features/templates/project/Capfile.erb +1 -1
  10. data/lib/recap/recipes/rails.rb +6 -0
  11. data/lib/recap/recipes/ruby.rb +11 -0
  12. data/lib/recap/recipes/static.rb +3 -0
  13. data/lib/recap/recipes.rb +18 -0
  14. data/lib/recap/support/capistrano_extensions.rb +85 -0
  15. data/lib/recap/support/cli.rb +57 -0
  16. data/lib/recap/{compatibility.rb → support/compatibility.rb} +2 -2
  17. data/lib/recap/support/environment.rb +61 -0
  18. data/lib/recap/support/namespace.rb +47 -0
  19. data/lib/recap/support/shell_command.rb +35 -0
  20. data/lib/recap/support/templates/Capfile.erb +6 -0
  21. data/lib/recap/tasks/bootstrap.rb +77 -0
  22. data/lib/recap/{bundler.rb → tasks/bundler.rb} +15 -6
  23. data/lib/recap/{deploy.rb → tasks/deploy.rb} +30 -17
  24. data/lib/recap/tasks/env.rb +111 -0
  25. data/lib/recap/{foreman.rb → tasks/foreman.rb} +20 -12
  26. data/lib/recap/{preflight.rb → tasks/preflight.rb} +13 -11
  27. data/lib/recap/tasks/rails.rb +42 -0
  28. data/lib/recap/tasks.rb +16 -0
  29. data/lib/recap/version.rb +1 -1
  30. data/lib/recap.rb +119 -10
  31. data/recap.gemspec +3 -2
  32. data/spec/models/capistrano_extensions_spec.rb +41 -0
  33. data/spec/models/cli_spec.rb +25 -0
  34. data/spec/models/environment_spec.rb +14 -14
  35. data/spec/models/shell_command_spec.rb +55 -0
  36. data/spec/spec_helper.rb +1 -1
  37. data/spec/tasks/bootstrap_spec.rb +9 -13
  38. data/spec/tasks/bundler_spec.rb +39 -7
  39. data/spec/tasks/deploy_spec.rb +42 -26
  40. data/spec/tasks/env_spec.rb +81 -5
  41. data/spec/tasks/foreman_spec.rb +10 -5
  42. data/spec/tasks/rails_spec.rb +80 -0
  43. metadata +65 -57
  44. data/doc/index.html +0 -235
  45. data/doc/lib/recap/bootstrap.html +0 -42
  46. data/doc/lib/recap/bundler.html +0 -168
  47. data/doc/lib/recap/capistrano_extensions.html +0 -208
  48. data/doc/lib/recap/cli.html +0 -42
  49. data/doc/lib/recap/compatibility.html +0 -73
  50. data/doc/lib/recap/deploy.html +0 -328
  51. data/doc/lib/recap/env.html +0 -108
  52. data/doc/lib/recap/foreman.html +0 -42
  53. data/doc/lib/recap/namespace.html +0 -42
  54. data/doc/lib/recap/preflight.html +0 -163
  55. data/doc/lib/recap/rails.html +0 -42
  56. data/doc/lib/recap/version.html +0 -42
  57. data/doc/lib/recap.html +0 -42
  58. data/index.rb +0 -62
  59. data/lib/recap/bootstrap.rb +0 -47
  60. data/lib/recap/capistrano_extensions.rb +0 -74
  61. data/lib/recap/cli.rb +0 -32
  62. data/lib/recap/deploy/templates/Capfile.erb +0 -6
  63. data/lib/recap/env.rb +0 -58
  64. data/lib/recap/environment.rb +0 -54
  65. data/lib/recap/namespace.rb +0 -37
  66. data/lib/recap/rails.rb +0 -24
  67. data/lib/recap/ruby.rb +0 -3
  68. data/lib/recap/static.rb +0 -1
@@ -1,328 +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
- <div id="jump_to">
12
- Jump To &hellip;
13
- <div id="jump_wrapper">
14
- <div id="jump_page">
15
- <a class="source" href="../../index.html">index.rb</a>
16
- <a class="source" href="../recap.html">recap.rb</a>
17
- <a class="source" href="bootstrap.html">bootstrap.rb</a>
18
- <a class="source" href="bundler.html">bundler.rb</a>
19
- <a class="source" href="capistrano_extensions.html">capistrano_extensions.rb</a>
20
- <a class="source" href="cli.html">cli.rb</a>
21
- <a class="source" href="compatibility.html">compatibility.rb</a>
22
- <a class="source" href="deploy.html">deploy.rb</a>
23
- <a class="source" href="env.html">env.rb</a>
24
- <a class="source" href="foreman.html">foreman.rb</a>
25
- <a class="source" href="namespace.html">namespace.rb</a>
26
- <a class="source" href="preflight.html">preflight.rb</a>
27
- <a class="source" href="rails.html">rails.rb</a>
28
- <a class="source" href="version.html">version.rb</a>
29
- </div>
30
- </div>
31
- </div>
32
- <table cellspacing=0 cellpadding=0>
33
- <thead>
34
- <tr>
35
- <th class=docs><h1>deploy.rb</h1></th>
36
- <th class=code></th>
37
- </tr>
38
- </thead>
39
- <tbody>
40
- <tr id='section-1'>
41
- <td class=docs>
42
- <div class="pilwrap">
43
- <a class="pilcrow" href="#section-1">&#182;</a>
44
- </div>
45
-
46
- </td>
47
- <td class=code>
48
- <div class='highlight'><pre><span class="nb">require</span> <span class="s1">&#39;recap&#39;</span>
49
- <span class="nb">require</span> <span class="s1">&#39;recap/capistrano_extensions&#39;</span>
50
-
51
- <span class="nb">require</span> <span class="s1">&#39;recap/bootstrap&#39;</span>
52
- <span class="nb">require</span> <span class="s1">&#39;recap/bundler&#39;</span>
53
- <span class="nb">require</span> <span class="s1">&#39;recap/env&#39;</span>
54
- <span class="nb">require</span> <span class="s1">&#39;recap/preflight&#39;</span>
55
-
56
- <span class="k">module</span> <span class="nn">Recap::Deploy</span>
57
- <span class="kp">extend</span> <span class="no">Recap</span><span class="o">::</span><span class="no">Namespace</span>
58
-
59
- <span class="n">namespace</span> <span class="ss">:deploy</span> <span class="k">do</span></pre></div>
60
- </td>
61
- </tr>
62
- <tr id='section-2'>
63
- <td class=docs>
64
- <div class="pilwrap">
65
- <a class="pilcrow" href="#section-2">&#182;</a>
66
- </div>
67
- <p>To use this recipe, both the application&rsquo;s name and its git repository are required.</p>
68
- </td>
69
- <td class=code>
70
- <div class='highlight'><pre> <span class="n">set</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;You must set the name of your application in your Capfile, e.g.: set :application, &#39;tomafro.net&#39;&quot;</span> <span class="p">}</span>
71
- <span class="n">set</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;You must set the git respository location in your Capfile, e.g.: set :respository, &#39;git@github.com/tomafro/tomafro.net&#39;&quot;</span><span class="p">}</span></pre></div>
72
- </td>
73
- </tr>
74
- <tr id='section-3'>
75
- <td class=docs>
76
- <div class="pilwrap">
77
- <a class="pilcrow" href="#section-3">&#182;</a>
78
- </div>
79
- <p>The recipe assumes that the application code will be run as a dedicated user. Any any user who
80
- can deploy the application should be added as a member of the application&rsquo;s group. By default,
81
- both the application user and group take the same name as the application.</p>
82
- </td>
83
- <td class=code>
84
- <div class='highlight'><pre> <span class="n">set</span><span class="p">(</span><span class="ss">:application_user</span><span class="p">)</span> <span class="p">{</span> <span class="n">application</span> <span class="p">}</span>
85
- <span class="n">set</span><span class="p">(</span><span class="ss">:application_group</span><span class="p">)</span> <span class="p">{</span> <span class="n">application_user</span> <span class="p">}</span></pre></div>
86
- </td>
87
- </tr>
88
- <tr id='section-4'>
89
- <td class=docs>
90
- <div class="pilwrap">
91
- <a class="pilcrow" href="#section-4">&#182;</a>
92
- </div>
93
- <p>Deployments can be made from any branch. <code>master</code> is used by default.</p>
94
- </td>
95
- <td class=code>
96
- <div class='highlight'><pre> <span class="n">set</span><span class="p">(</span><span class="ss">:branch</span><span class="p">,</span> <span class="s1">&#39;master&#39;</span><span class="p">)</span></pre></div>
97
- </td>
98
- </tr>
99
- <tr id='section-5'>
100
- <td class=docs>
101
- <div class="pilwrap">
102
- <a class="pilcrow" href="#section-5">&#182;</a>
103
- </div>
104
- <p>Unlike a standard capistrano deployment, all releases are stored directly in the <code>deploy_to</code>
105
- directory. The default is <code>/home/#{application_user}/apps/#{application}</code>.</p>
106
- </td>
107
- <td class=code>
108
- <div class='highlight'><pre> <span class="n">set</span><span class="p">(</span><span class="ss">:deploy_to</span><span class="p">)</span> <span class="p">{</span> <span class="s2">&quot;/home/</span><span class="si">#{</span><span class="n">application_user</span><span class="si">}</span><span class="s2">/apps/</span><span class="si">#{</span><span class="n">application</span><span class="si">}</span><span class="s2">&quot;</span> <span class="p">}</span></pre></div>
109
- </td>
110
- </tr>
111
- <tr id='section-6'>
112
- <td class=docs>
113
- <div class="pilwrap">
114
- <a class="pilcrow" href="#section-6">&#182;</a>
115
- </div>
116
- <p>Each release is marked by a unique tag, generated with the current timestamp. While this can be
117
- changed, it&rsquo;s not recommended, as the sort order of the tag names is important; later tags must
118
- be listed after earlier tags.</p>
119
- </td>
120
- <td class=code>
121
- <div class='highlight'><pre> <span class="n">set</span><span class="p">(</span><span class="ss">:release_tag</span><span class="p">)</span> <span class="p">{</span> <span class="s2">&quot;</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">utc</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&quot;%Y%m%d%H%M%S&quot;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">}</span></pre></div>
122
- </td>
123
- </tr>
124
- <tr id='section-7'>
125
- <td class=docs>
126
- <div class="pilwrap">
127
- <a class="pilcrow" href="#section-7">&#182;</a>
128
- </div>
129
- <p>On tagging a release, a message is also recorded alongside the tag. This message can contain
130
- anything useful &ndash; its contents are not important for the recipe.</p>
131
- </td>
132
- <td class=code>
133
- <div class='highlight'><pre> <span class="n">set</span><span class="p">(</span><span class="ss">:release_message</span><span class="p">,</span> <span class="s2">&quot;Deployed at </span><span class="si">#{</span><span class="no">Time</span><span class="o">.</span><span class="n">now</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span></pre></div>
134
- </td>
135
- </tr>
136
- <tr id='section-8'>
137
- <td class=docs>
138
- <div class="pilwrap">
139
- <a class="pilcrow" href="#section-8">&#182;</a>
140
- </div>
141
- <p>Some tasks need to know the <code>latest_tag</code> &ndash; the most recent successful deployment. If no
142
- deployments have been made, this will be <code>nil</code>.</p>
143
- </td>
144
- <td class=code>
145
- <div class='highlight'><pre> <span class="n">set</span><span class="p">(</span><span class="ss">:latest_tag</span><span class="p">)</span> <span class="p">{</span> <span class="n">latest_tag_from_repository</span> <span class="p">}</span></pre></div>
146
- </td>
147
- </tr>
148
- <tr id='section-9'>
149
- <td class=docs>
150
- <div class="pilwrap">
151
- <a class="pilcrow" href="#section-9">&#182;</a>
152
- </div>
153
- <p>To authenticate with github or other git servers, it is easier (and cleaner) to forward the
154
- deploying user&rsquo;s ssh key than manage keys on deployment servers.</p>
155
- </td>
156
- <td class=code>
157
- <div class='highlight'><pre> <span class="n">ssh_options</span><span class="o">[</span><span class="ss">:forward_agent</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span></pre></div>
158
- </td>
159
- </tr>
160
- <tr id='section-10'>
161
- <td class=docs>
162
- <div class="pilwrap">
163
- <a class="pilcrow" href="#section-10">&#182;</a>
164
- </div>
165
- <p>If key forwarding isn&rsquo;t possible, git may show a password prompt which stalls capistrano unless
166
- <code>:pty</code> is set to <code>true</code>.</p>
167
- </td>
168
- <td class=code>
169
- <div class='highlight'><pre> <span class="n">default_run_options</span><span class="o">[</span><span class="ss">:pty</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span></pre></div>
170
- </td>
171
- </tr>
172
- <tr id='section-11'>
173
- <td class=docs>
174
- <div class="pilwrap">
175
- <a class="pilcrow" href="#section-11">&#182;</a>
176
- </div>
177
- <p>The <code>deploy:setup</code> task prepares all the servers for the deployment.</p>
178
- </td>
179
- <td class=code>
180
- <div class='highlight'><pre> <span class="n">desc</span> <span class="s2">&quot;Prepare servers for deployment&quot;</span>
181
- <span class="n">task</span> <span class="ss">:setup</span><span class="p">,</span> <span class="ss">:except</span> <span class="o">=&gt;</span> <span class="p">{</span><span class="ss">:no_release</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">}</span> <span class="k">do</span>
182
- <span class="n">transaction</span> <span class="k">do</span>
183
- <span class="n">clone_code</span>
184
- <span class="k">end</span>
185
- <span class="k">end</span></pre></div>
186
- </td>
187
- </tr>
188
- <tr id='section-12'>
189
- <td class=docs>
190
- <div class="pilwrap">
191
- <a class="pilcrow" href="#section-12">&#182;</a>
192
- </div>
193
- <p>Clone the repository into the deployment directory.</p>
194
- </td>
195
- <td class=code>
196
- <div class='highlight'><pre> <span class="n">task</span> <span class="ss">:clone_code</span><span class="p">,</span> <span class="ss">:except</span> <span class="o">=&gt;</span> <span class="p">{</span><span class="ss">:no_release</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">}</span> <span class="k">do</span></pre></div>
197
- </td>
198
- </tr>
199
- <tr id='section-13'>
200
- <td class=docs>
201
- <div class="pilwrap">
202
- <a class="pilcrow" href="#section-13">&#182;</a>
203
- </div>
204
- <p>Before cloning, the directory needs to exist and be both readable and writable by the group</p>
205
- </td>
206
- <td class=code>
207
- <div class='highlight'><pre> <span class="n">as_app</span> <span class="s2">&quot;mkdir -p </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>
208
- <span class="n">as_app</span> <span class="s2">&quot;chmod g+rw </span><span class="si">#{</span><span class="n">deploy_to</span><span class="si">}</span><span class="s2">&quot;</span></pre></div>
209
- </td>
210
- </tr>
211
- <tr id='section-14'>
212
- <td class=docs>
213
- <div class="pilwrap">
214
- <a class="pilcrow" href="#section-14">&#182;</a>
215
- </div>
216
- <p>Then clone the code</p>
217
- </td>
218
- <td class=code>
219
- <div class='highlight'><pre> <span class="n">git</span> <span class="s2">&quot;clone </span><span class="si">#{</span><span class="n">repository</span><span class="si">}</span><span class="s2"> .&quot;</span>
220
- <span class="k">end</span></pre></div>
221
- </td>
222
- </tr>
223
- <tr id='section-15'>
224
- <td class=docs>
225
- <div class="pilwrap">
226
- <a class="pilcrow" href="#section-15">&#182;</a>
227
- </div>
228
- <p>The main deployment task (called with <code>cap deploy</code>) deploys the latest application code to all
229
- servers, tags the release and restarts the application.</p>
230
- </td>
231
- <td class=code>
232
- <div class='highlight'><pre> <span class="n">desc</span> <span class="s2">&quot;Deploy the latest application code&quot;</span>
233
- <span class="n">task</span> <span class="ss">:default</span> <span class="k">do</span>
234
- <span class="n">transaction</span> <span class="k">do</span>
235
- <span class="n">update_code</span>
236
- <span class="n">tag</span>
237
- <span class="k">end</span>
238
- <span class="n">restart</span>
239
- <span class="k">end</span></pre></div>
240
- </td>
241
- </tr>
242
- <tr id='section-16'>
243
- <td class=docs>
244
- <div class="pilwrap">
245
- <a class="pilcrow" href="#section-16">&#182;</a>
246
- </div>
247
- <p>Fetch the latest changes, then update <code>HEAD</code> to the deployment branch.</p>
248
- </td>
249
- <td class=code>
250
- <div class='highlight'><pre> <span class="n">task</span> <span class="ss">:update_code</span><span class="p">,</span> <span class="ss">:except</span> <span class="o">=&gt;</span> <span class="p">{</span><span class="ss">:no_release</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">}</span> <span class="k">do</span>
251
- <span class="n">on_rollback</span> <span class="p">{</span> <span class="n">git</span> <span class="s2">&quot;reset --hard </span><span class="si">#{</span><span class="n">latest_tag</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">latest_tag</span> <span class="p">}</span>
252
- <span class="n">git</span> <span class="s2">&quot;fetch&quot;</span>
253
- <span class="n">git</span> <span class="s2">&quot;reset --hard origin/</span><span class="si">#{</span><span class="n">branch</span><span class="si">}</span><span class="s2">&quot;</span>
254
- <span class="k">end</span></pre></div>
255
- </td>
256
- </tr>
257
- <tr id='section-17'>
258
- <td class=docs>
259
- <div class="pilwrap">
260
- <a class="pilcrow" href="#section-17">&#182;</a>
261
- </div>
262
- <p>Tag <code>HEAD</code> with the release tag and message</p>
263
- </td>
264
- <td class=code>
265
- <div class='highlight'><pre> <span class="n">task</span> <span class="ss">:tag</span><span class="p">,</span> <span class="ss">:except</span> <span class="o">=&gt;</span> <span class="p">{</span><span class="ss">:no_release</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">}</span> <span class="k">do</span>
266
- <span class="n">on_rollback</span> <span class="p">{</span> <span class="n">git</span> <span class="s2">&quot;tag -d </span><span class="si">#{</span><span class="n">release_tag</span><span class="si">}</span><span class="s2">&quot;</span> <span class="p">}</span>
267
- <span class="n">git</span> <span class="s2">&quot;tag </span><span class="si">#{</span><span class="n">release_tag</span><span class="si">}</span><span class="s2"> -m &#39;</span><span class="si">#{</span><span class="n">release_message</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
268
- <span class="k">end</span></pre></div>
269
- </td>
270
- </tr>
271
- <tr id='section-18'>
272
- <td class=docs>
273
- <div class="pilwrap">
274
- <a class="pilcrow" href="#section-18">&#182;</a>
275
- </div>
276
- <p>After a successful deployment, the app is restarted. In the most basic deployments this does
277
- nothing, but other recipes may override it, or attach tasks it&rsquo;s before or after hooks.</p>
278
- </td>
279
- <td class=code>
280
- <div class='highlight'><pre> <span class="n">desc</span> <span class="s2">&quot;Restart the application following a deploy&quot;</span>
281
- <span class="n">task</span> <span class="ss">:restart</span> <span class="k">do</span>
282
- <span class="k">end</span></pre></div>
283
- </td>
284
- </tr>
285
- <tr id='section-19'>
286
- <td class=docs>
287
- <div class="pilwrap">
288
- <a class="pilcrow" href="#section-19">&#182;</a>
289
- </div>
290
- <p>To rollback a release, the latest tag is deleted, and <code>HEAD</code> reset to the previous release
291
- (if one exists). Finally the application is restarted again.</p>
292
- </td>
293
- <td class=code>
294
- <div class='highlight'><pre> <span class="n">desc</span> <span class="s2">&quot;Rollback to the previous release&quot;</span>
295
- <span class="n">namespace</span> <span class="ss">:rollback</span> <span class="k">do</span>
296
- <span class="n">task</span> <span class="ss">:default</span> <span class="k">do</span>
297
- <span class="k">if</span> <span class="n">latest_tag</span>
298
- <span class="n">git</span> <span class="s2">&quot;tag -d </span><span class="si">#{</span><span class="n">latest_tag</span><span class="si">}</span><span class="s2">&quot;</span>
299
- <span class="k">if</span> <span class="n">previous_tag</span> <span class="o">=</span> <span class="n">latest_tag_from_repository</span>
300
- <span class="n">git</span> <span class="s2">&quot;reset --hard </span><span class="si">#{</span><span class="n">previous_tag</span><span class="si">}</span><span class="s2">&quot;</span>
301
- <span class="k">end</span>
302
- <span class="k">end</span>
303
- <span class="n">restart</span>
304
- <span class="k">end</span>
305
- <span class="k">end</span></pre></div>
306
- </td>
307
- </tr>
308
- <tr id='section-20'>
309
- <td class=docs>
310
- <div class="pilwrap">
311
- <a class="pilcrow" href="#section-20">&#182;</a>
312
- </div>
313
- <p>In case of emergency or when manually testing deployment, it can be useful to remove all
314
- previously deployed files before starting again.</p>
315
-
316
- </td>
317
- <td class=code>
318
- <div class='highlight'><pre> <span class="n">desc</span> <span class="s2">&quot;Remove all deployed files&quot;</span>
319
- <span class="n">task</span> <span class="ss">:destroy</span> <span class="k">do</span>
320
- <span class="n">sudo</span> <span class="s2">&quot;rm -rf </span><span class="si">#{</span><span class="n">deploy_to</span><span class="si">}</span><span class="s2">&quot;</span>
321
- <span class="k">end</span>
322
- <span class="k">end</span>
323
- <span class="k">end</span></pre></div>
324
- </td>
325
- </tr>
326
- </table>
327
- </div>
328
- </body>
@@ -1,108 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta http-equiv="content-type" content="text/html;charset=utf-8">
5
- <title>env.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
- <div id="jump_to">
12
- Jump To &hellip;
13
- <div id="jump_wrapper">
14
- <div id="jump_page">
15
- <a class="source" href="../../index.html">index.rb</a>
16
- <a class="source" href="../recap.html">recap.rb</a>
17
- <a class="source" href="bootstrap.html">bootstrap.rb</a>
18
- <a class="source" href="bundler.html">bundler.rb</a>
19
- <a class="source" href="capistrano_extensions.html">capistrano_extensions.rb</a>
20
- <a class="source" href="cli.html">cli.rb</a>
21
- <a class="source" href="compatibility.html">compatibility.rb</a>
22
- <a class="source" href="deploy.html">deploy.rb</a>
23
- <a class="source" href="env.html">env.rb</a>
24
- <a class="source" href="foreman.html">foreman.rb</a>
25
- <a class="source" href="namespace.html">namespace.rb</a>
26
- <a class="source" href="preflight.html">preflight.rb</a>
27
- <a class="source" href="rails.html">rails.rb</a>
28
- <a class="source" href="version.html">version.rb</a>
29
- </div>
30
- </div>
31
- </div>
32
- <table cellspacing=0 cellpadding=0>
33
- <thead>
34
- <tr>
35
- <th class=docs><h1>env.rb</h1></th>
36
- <th class=code></th>
37
- </tr>
38
- </thead>
39
- <tbody>
40
- <tr id='section-1'>
41
- <td class=docs>
42
- <div class="pilwrap">
43
- <a class="pilcrow" href="#section-1">&#182;</a>
44
- </div>
45
- <p>N.B. To get the environment loaded on every shell invocation add the following to .profile:</p>
46
-
47
- <pre><code>if [ -s &ldquo;$HOME/.env&rdquo; ]; then export $(cat $HOME/.env); fi
48
- </code></pre>
49
-
50
- <p>This will eventually be done automatically</p>
51
-
52
- </td>
53
- <td class=code>
54
- <div class='highlight'><pre><span class="k">module</span> <span class="nn">Recap::Env</span>
55
- <span class="kp">extend</span> <span class="no">Recap</span><span class="o">::</span><span class="no">Namespace</span>
56
-
57
- <span class="n">namespace</span> <span class="ss">:env</span> <span class="k">do</span>
58
- <span class="n">set</span><span class="p">(</span><span class="ss">:environment_file</span><span class="p">)</span> <span class="p">{</span> <span class="s2">&quot;/home/</span><span class="si">#{</span><span class="n">application_user</span><span class="si">}</span><span class="s2">/.env&quot;</span> <span class="p">}</span>
59
-
60
- <span class="k">def</span> <span class="nf">extract_environment</span><span class="p">(</span><span class="n">declarations</span><span class="p">)</span>
61
- <span class="n">declarations</span><span class="o">.</span><span class="n">inject</span><span class="p">({})</span> <span class="k">do</span> <span class="o">|</span><span class="n">env</span><span class="p">,</span> <span class="n">line</span><span class="o">|</span>
62
- <span class="k">if</span> <span class="n">line</span> <span class="o">=~</span> <span class="sr">/\A([A-Za-z_]+)=(.*)\z/</span>
63
- <span class="n">env</span><span class="o">[</span><span class="vg">$1</span><span class="o">]</span> <span class="o">=</span> <span class="vg">$2</span><span class="o">.</span><span class="n">strip</span>
64
- <span class="k">end</span>
65
- <span class="n">env</span>
66
- <span class="k">end</span>
67
- <span class="k">end</span>
68
-
69
- <span class="k">def</span> <span class="nf">current_environment</span>
70
- <span class="vi">@current_environment</span> <span class="o">||=</span> <span class="k">begin</span>
71
- <span class="k">if</span> <span class="n">deployed_file_exists?</span><span class="p">(</span><span class="n">environment_file</span><span class="p">)</span>
72
- <span class="n">extract_environment</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">environment_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">))</span>
73
- <span class="k">else</span>
74
- <span class="p">{}</span>
75
- <span class="k">end</span>
76
- <span class="k">end</span>
77
- <span class="k">end</span>
78
-
79
- <span class="k">def</span> <span class="nf">write_environment</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
80
- <span class="n">env</span><span class="o">.</span><span class="n">keys</span><span class="o">.</span><span class="n">sort</span><span class="o">.</span><span class="n">collect</span> <span class="k">do</span> <span class="o">|</span><span class="n">v</span><span class="o">|</span>
81
- <span class="s2">&quot;</span><span class="si">#{</span><span class="n">v</span><span class="si">}</span><span class="s2">=</span><span class="si">#{</span><span class="n">env</span><span class="o">[</span><span class="n">v</span><span class="o">]</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">unless</span> <span class="n">env</span><span class="o">[</span><span class="n">v</span><span class="o">].</span><span class="n">nil?</span> <span class="o">||</span> <span class="n">env</span><span class="o">[</span><span class="n">v</span><span class="o">].</span><span class="n">empty?</span>
82
- <span class="k">end</span><span class="o">.</span><span class="n">compact</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
83
- <span class="k">end</span>
84
-
85
- <span class="n">task</span> <span class="ss">:default</span> <span class="k">do</span>
86
- <span class="nb">puts</span> <span class="n">write_environment</span><span class="p">(</span><span class="n">current_environment</span><span class="p">)</span>
87
- <span class="k">end</span>
88
-
89
- <span class="n">task</span> <span class="ss">:set</span> <span class="k">do</span>
90
- <span class="n">additions</span> <span class="o">=</span> <span class="n">extract_environment</span><span class="p">(</span><span class="no">ARGV</span><span class="o">[</span><span class="mi">1</span><span class="o">.</span><span class="n">.</span><span class="o">-</span><span class="mi">1</span><span class="o">]</span><span class="p">)</span>
91
- <span class="n">env</span> <span class="o">=</span> <span class="n">write_environment</span><span class="p">(</span><span class="n">current_environment</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">additions</span><span class="p">))</span>
92
- <span class="k">if</span> <span class="n">env</span><span class="o">.</span><span class="n">empty?</span>
93
- <span class="n">as_app</span> <span class="s2">&quot;rm -f </span><span class="si">#{</span><span class="n">environment_file</span><span class="si">}</span><span class="s2">&quot;</span>
94
- <span class="k">else</span>
95
- <span class="n">put_as_app</span> <span class="n">env</span><span class="p">,</span> <span class="n">environment_file</span>
96
- <span class="k">end</span>
97
- <span class="k">end</span>
98
-
99
- <span class="n">task</span> <span class="ss">:edit</span> <span class="k">do</span>
100
- <span class="n">edit_file</span> <span class="n">environment_file</span>
101
- <span class="k">end</span>
102
- <span class="k">end</span>
103
- <span class="k">end</span></pre></div>
104
- </td>
105
- </tr>
106
- </table>
107
- </div>
108
- </body>
@@ -1,42 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta http-equiv="content-type" content="text/html;charset=utf-8">
5
- <title>foreman.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
- <div id="jump_to">
12
- Jump To &hellip;
13
- <div id="jump_wrapper">
14
- <div id="jump_page">
15
- <a class="source" href="../../index.html">index.rb</a>
16
- <a class="source" href="../recap.html">recap.rb</a>
17
- <a class="source" href="bootstrap.html">bootstrap.rb</a>
18
- <a class="source" href="bundler.html">bundler.rb</a>
19
- <a class="source" href="capistrano_extensions.html">capistrano_extensions.rb</a>
20
- <a class="source" href="cli.html">cli.rb</a>
21
- <a class="source" href="compatibility.html">compatibility.rb</a>
22
- <a class="source" href="deploy.html">deploy.rb</a>
23
- <a class="source" href="env.html">env.rb</a>
24
- <a class="source" href="foreman.html">foreman.rb</a>
25
- <a class="source" href="namespace.html">namespace.rb</a>
26
- <a class="source" href="preflight.html">preflight.rb</a>
27
- <a class="source" href="rails.html">rails.rb</a>
28
- <a class="source" href="version.html">version.rb</a>
29
- </div>
30
- </div>
31
- </div>
32
- <table cellspacing=0 cellpadding=0>
33
- <thead>
34
- <tr>
35
- <th class=docs><h1>foreman.rb</h1></th>
36
- <th class=code></th>
37
- </tr>
38
- </thead>
39
- <tbody>
40
- </table>
41
- </div>
42
- </body>
@@ -1,42 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta http-equiv="content-type" content="text/html;charset=utf-8">
5
- <title>namespace.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
- <div id="jump_to">
12
- Jump To &hellip;
13
- <div id="jump_wrapper">
14
- <div id="jump_page">
15
- <a class="source" href="../../index.html">index.rb</a>
16
- <a class="source" href="../recap.html">recap.rb</a>
17
- <a class="source" href="bootstrap.html">bootstrap.rb</a>
18
- <a class="source" href="bundler.html">bundler.rb</a>
19
- <a class="source" href="capistrano_extensions.html">capistrano_extensions.rb</a>
20
- <a class="source" href="cli.html">cli.rb</a>
21
- <a class="source" href="compatibility.html">compatibility.rb</a>
22
- <a class="source" href="deploy.html">deploy.rb</a>
23
- <a class="source" href="env.html">env.rb</a>
24
- <a class="source" href="foreman.html">foreman.rb</a>
25
- <a class="source" href="namespace.html">namespace.rb</a>
26
- <a class="source" href="preflight.html">preflight.rb</a>
27
- <a class="source" href="rails.html">rails.rb</a>
28
- <a class="source" href="version.html">version.rb</a>
29
- </div>
30
- </div>
31
- </div>
32
- <table cellspacing=0 cellpadding=0>
33
- <thead>
34
- <tr>
35
- <th class=docs><h1>namespace.rb</h1></th>
36
- <th class=code></th>
37
- </tr>
38
- </thead>
39
- <tbody>
40
- </table>
41
- </div>
42
- </body>