mina 0.1.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.
@@ -0,0 +1,4 @@
1
+ doc
2
+ test_env/deploy
3
+ .rvmrc
4
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ -c --order rand -t ~ssh
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.3
5
+ - rbx-18mode
6
+ - rbx-19mode
7
+ - ruby-head
8
+ env:
9
+ - "rake=0.8"
10
+ - "rake=0.9"
11
+ script: "bundle exec rspec"
12
+ notifications:
13
+ email: false
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ # Why use bundler?
2
+ # Well, not all development dependencies install on all rubies. Moreover, `gem
3
+ # install mina --development` doesn't work, as it will also try to install
4
+ # development dependencies of our dependencies, and those are not conflict free.
5
+ # So, here we are, `bundle install`.
6
+
7
+ source :rubygems
8
+ gemspec
9
+
10
+ gem 'rake', "~> #{ENV['rake'] || "0.9"}.0"
@@ -0,0 +1,148 @@
1
+ v0.1.0 - Jun 06, 2012
2
+ ---------------------
3
+
4
+ Renamed to Mina from Van Helsing.
5
+
6
+
7
+ v0.0.1.pre7 - Jun 06, 2012
8
+ --------------------------
9
+
10
+ ### Added:
11
+ * __`vh rails[command]` and `vh rake[command]` tasks.__
12
+ * __Add `vh run`.__
13
+ * `-S` as an alias for `--simulate`.
14
+ * the `#set_default` helper.
15
+ * the `bundle_prefix` setting.
16
+ * New `term_mode` setting.
17
+
18
+ ### Changed:
19
+ * `--simulate` show things without the `ssh` command or shellescaping.
20
+
21
+ v0.0.1.pre6 - Jun 06, 2012
22
+ --------------------------
23
+
24
+ Thanks to @sosedoff for his contributions that made it to this release.
25
+
26
+ ### Added:
27
+ * __Rubinius support.__
28
+ * __Ruby 1.8 support.__
29
+ * Prelimenary JRuby support.
30
+ * MIT license.
31
+ * Highlight errors as red in deploy.
32
+ * Use popen4 instead of popen3. Support JRuby via IO.popen4.
33
+
34
+ ### Changed:
35
+ * __Rename `to :restart` to `to :launch`.__
36
+ * __Make deploys fail if renaming the build (eg, not setup properly) fails.__
37
+
38
+ ### Tests:
39
+ * Added `rake spec` (aliased as just `rake`) task. It tests with Rake 0.8 and 0.9 both.
40
+ * Integrate with [Travis CI](http://travis-ci.org).
41
+ * Make the SSH test more portable.
42
+ * Removed `rake spec:verbose`.
43
+
44
+ v0.0.1.pre5 - Jun 05, 2012
45
+ --------------------------
46
+
47
+ ### Added:
48
+ * Add `--trace` to the `vh help` screen.
49
+ * Rake 0.8 compatibility.
50
+ * Ruby 1.8.7 compatibility.
51
+
52
+ ### Changed:
53
+ * Use `:domain` instead of `:host`.
54
+
55
+ ### Misc:
56
+ * Allow rake 0.8 testing using `rake=0.8 rspec`.
57
+ * Add more README examples.
58
+
59
+ v0.0.1.pre4 - Jun 05, 2012
60
+ --------------------------
61
+
62
+ ### Added:
63
+ * `--simulate` switch.
64
+ * `--verbose` switch.
65
+ * The help screen now shows command line switches (like `--verbose`).
66
+ * Build in `tmp/` instead of in `releases/`.
67
+ * Use `verbose_mode` and `simulate_mode` instead. Using 'verbose' causes
68
+ problems.
69
+ * New `#deploy_script` helper, to make things more transparent.
70
+
71
+ ### Misc:
72
+ * Added a test for an actual deployment.
73
+ * Make the `test_env` runnable even without a net connection.
74
+ * New tests for actual deployment. Just do `rspec -t ssh`.
75
+ * Cleanup `git:clone` code.
76
+ * A buncha code cleanups.
77
+
78
+ v0.0.1.pre3 - Jun 04, 2012
79
+ --------------------------
80
+
81
+ ### Added:
82
+ * A help screen. You can see it with `vh --help`, `vh -h` or just plain `vh`.
83
+ * Implemented `vh --version`.
84
+ * Sequential release versions. Yay!
85
+ * Added the `build_path` setting, which supercedes the now-removed `release_path`.
86
+
87
+ ### Removed:
88
+ * `release_path` has been deprecated.
89
+
90
+ ### Fixed:
91
+ * Stupid critical bug fix: fix `vh:setup` giving the world access to deploy_to.
92
+ * Ensure that SSH stderr output is shown properly.
93
+ * Make `#invoke` work with tasks with arguments (eg, :'site:scrape[ensogo]')
94
+
95
+ ### Changed:
96
+ * Edit the default deploy.rb to have a description for the deploy task.
97
+ * Make `vh -T` show `vh` instead of `rake`.
98
+ * Make `vh setup` ensure ownership of the `deploy_to` path.
99
+ * Make deploy steps more explicit by echoing more statuses.
100
+ * When deploys fail, you now don't see the default Ruby backtrace. It now
101
+ behaves like Rake where you need to add `--trace` to see the trace.
102
+
103
+ ### Misc:
104
+ * Fixed the error that sometimes happens when invoking `vh` without a deploy.rb.
105
+ * Update the sample deploy.rb file to be more readable.
106
+ * The *test_env/* project can now be deployed without problems, so you can try
107
+ things out.
108
+ * Lots of new tests.
109
+ * rspec test order is now randomized.
110
+ * rspec output is colored (thanks to .rspec).
111
+ * Better script indentation when running in simulation mode.
112
+ * In symlinking `./current/`, use `ln -nfs` instead of `rm -f && ln -s`.
113
+
114
+ v0.0.1.pre2 - Jun 03, 2012
115
+ --------------------------
116
+
117
+ ### Added:
118
+ * Implement `vh init` which creates a sample *deploy.rb*.
119
+ * Implement 'vh setup'.
120
+ * Added the configurable `:releases_path` setting, so you may change where to keep releases.
121
+ * Added documentation via Reacco.
122
+ * Allow settings to throw errors on missing settings by adding a bang (e.g.,
123
+ `bundle_path!` or `settings.bundle_path!`)
124
+
125
+ ### Changed:
126
+ * Allow `bundle:install` to skip having shared bundle paths if `:bundle_path` is set to nil.
127
+ * Rename `force_unlock` to `deploy:force_unlock`.
128
+ * Rename `vh:link_shared_paths` to `deploy:link_shared_paths`.
129
+ * Invoking `deploy:force_unlock` now shows the command it uses.
130
+
131
+ ### Fixed:
132
+ * The `bundle:install` task now honors the `bundle_path` setting.
133
+ * Fixed `deploy:force_unlock` always throwing an error.
134
+ * The `deploy:force_unlock` task now honors the `lock_file`
135
+ setting, so the user may change the location of the lock file.
136
+ * Fixed `rails:assets_precompile` not compiling if no older assets found.
137
+
138
+ ### Removed:
139
+ * Deprecate `#validate_set`.
140
+
141
+ ### Other things:
142
+ * Move deploy settings to deploy.rb.
143
+ * Rename the `default` addon to `deploy`.
144
+
145
+ v0.0.1.pre1 - Jun 02, 2012
146
+ --------------------------
147
+
148
+ Initial version.
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ LICENSE
2
+
3
+ The MIT License
4
+
5
+ Copyright (c) 2012 Nadarei, Inc.
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ of this software and associated documentation files (the "Software"), to deal
9
+ in the Software without restriction, including without limitation the rights
10
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ copies of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in
15
+ all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ THE SOFTWARE.
@@ -0,0 +1,620 @@
1
+ # Mina [![status](https://secure.travis-ci.org/nadarei/mina.png?branch=master)](http://travis-ci.org/nadarei/mina)
2
+
3
+ Really fast deployer and server automation tool.
4
+
5
+ Mina works really fast because it's a deploy Bash script generator. It
6
+ generates an entire procedure as a Bash script and runs it remotely in the
7
+ server.
8
+
9
+ Compare this to the likes of Vlad or Capistrano, where each command
10
+ is ran separately on their own SSH sessions. Mina only creates *one* SSH
11
+ session per deploy, minimizing the SSH connection overhead.
12
+
13
+ $ gem install mina
14
+
15
+ Features
16
+ --------
17
+
18
+ * __Really fast.__ Mina only makes one SSH connection per deploy. It
19
+ builds a Bash script and executes it remotely, reducing the overhead of
20
+ creating SSH connections to do processing locally (like Vlad or Capistrano
21
+ does).
22
+
23
+ * __Safe deploys.__ New releases are built on a temp folder. If the deploy
24
+ script fails at any point, the build is deleted and it'd be as if nothing
25
+ happened.
26
+
27
+ * __Locks.__ Deploy scripts rely on a lockfile ensuring only one deploy can
28
+ happen at a time.
29
+
30
+ * __Works with anything.__ While Mina is built with Rails projects it
31
+ mind, it can be used on just about any type of project deployable via SSH,
32
+ Ruby or not.
33
+
34
+ * __Built with Rake.__ Setting up tasks will be very familiar! No YAML files
35
+ here. Everything is written in Ruby, giving you the power to be as flexible in
36
+ your configuration as needed.
37
+
38
+ Setting up a project
39
+ --------------------
40
+
41
+ Let's deploy a project using Mina.
42
+
43
+ ### Step 1: Create a config/deploy.rb
44
+
45
+ In your project, type `mina init` to create a sample of this file.
46
+
47
+ This is just a Rake file with tasks!
48
+
49
+ $ mina init
50
+ Created config/deploy.rb.
51
+
52
+ See [About deploy.rb](#about_deployrb) for more info on what *deploy.rb* is.
53
+
54
+ ### Step 2: Set up your server
55
+
56
+ Make a directory in your server called `/var/www/flipstack.com` (in *deploy_to*)
57
+ change it's ownership to the correct user.
58
+
59
+ # SSH into your server, then:
60
+ $ mkdir /var/www/flipstack.com
61
+ $ chown -R username /var/www/flipstack.com
62
+
63
+ # Make sure 'username' is the same as what's on deploy.rb
64
+
65
+ ### Step 3: Run 'mina setup'
66
+
67
+ Now do `mina setup` to set up the [folder structure](#directory_structure) in this
68
+ path. This will connect to your server via SSH and create the right directories.
69
+
70
+ $ mina setup
71
+ -----> Creating folders... done.
72
+
73
+ See [directory structure](#directory_structure) for more info.
74
+
75
+ ### Step 4: Deploy!
76
+
77
+ Use `mina deploy` to run the `deploy` task defined in *config/deploy.rb*.
78
+
79
+ $ mina deploy
80
+ -----> Deploying to 2012-06-12-040248
81
+ ...
82
+ Lots of things happening...
83
+ ...
84
+ -----> Done.
85
+
86
+ Command line options
87
+ --------------------
88
+
89
+ * `--verbose` - This will show commands being done on the server. Off by
90
+ default.
91
+
92
+ * `--simulate` - This will not invoke any SSH connections; instead, it will
93
+ simply output the script it builds.
94
+
95
+ About deploy.rb
96
+ ---------------
97
+
98
+ The file `deploy.rb` is simply a Rakefile invoked by Rake. In fact, `mina` is
99
+ mostly an alias that invokes Rake to load `deploy.rb`.
100
+
101
+ As it's all Rake, you can define tasks that you can invoke using `mina`. In this
102
+ example, it provides the `mina restart` command.
103
+
104
+ ``` ruby
105
+ # Sample config/deploy.rb
106
+ set :domain, 'your.server.com'
107
+
108
+ task :restart do
109
+ queue 'sudo service restart apache'
110
+ end
111
+ ```
112
+
113
+ The magic of Mina is in the new commands it gives you.
114
+
115
+ The `queue` command queues up Bash commands to be ran on the remote server.
116
+ If you invoke `mina restart`, it will invoke the task above and run the queued
117
+ commands on the remote server `your.server.com` via SSH.
118
+
119
+ See [the command queue](#the_command_queue) for more information on the *queue*
120
+ command.
121
+
122
+ The command queue
123
+ -----------------
124
+
125
+ At the heart of it, Mina is merely sugar on top of Rake to queue commands
126
+ and execute them remotely at the end.
127
+
128
+ Take a look at this minimal *deploy.rb* configuration:
129
+
130
+ ``` ruby
131
+ set :user, 'john'
132
+ set :domain, 'flipstack.com'
133
+
134
+ task :logs do
135
+ queue 'echo "Contents of the log file are as follows:"'
136
+ queue "tail -f /var/log/apache.log"
137
+ end
138
+ ```
139
+
140
+ Once you type `mina logs` in your terminal, it invokes the *queue*d commands
141
+ remotely on the server using the command `ssh john@flipstack.com`.
142
+
143
+ ```
144
+ # Run it in simulation mode so we see the command it will invoke:
145
+ $ mina logs --simulate
146
+ (
147
+ echo "Contents of the log file are as follows:"
148
+ tail -f /var/log/apache.log
149
+ ) | ssh john@flipstack.com -- bash -
150
+ ```
151
+
152
+ Subtasks
153
+ --------
154
+
155
+ Mina provides the helper `invoke` to invoke other tasks from a
156
+ task.
157
+
158
+ ```ruby
159
+ task :down do
160
+ invoke :maintenance_on
161
+ invoke :restart
162
+ end
163
+
164
+ task :maintenance_on
165
+ queue 'touch maintenance.txt'
166
+ end
167
+
168
+ task :restart
169
+ queue 'sudo service restart apache'
170
+ end
171
+ ```
172
+
173
+ In this example above, if you type `mina down`, it simply invokes the other
174
+ subtasks which queues up their commands. The commands will be ran after
175
+ everything.
176
+
177
+ Deploying
178
+ ---------
179
+
180
+ Mina provides the `deploy` command which *queue*s up a deploy script for
181
+ you.
182
+
183
+ ``` ruby
184
+ set :domain, 'flipstack.com'
185
+ set :user, 'flipstack'
186
+ set :deploy_to, '/var/www/flipstack.com'
187
+ set :repository, 'http://github.com/flipstack/flipstack.git'
188
+
189
+ task :deploy do
190
+ deploy do
191
+ # Put things that prepare the empty release folder here.
192
+ # Commands queued here will be ran on a new release directory.
193
+ invoke :'git:clone'
194
+ invoke :'bundle:install'
195
+
196
+ # These are instructions to start the app after it's been prepared.
197
+ to :launch do
198
+ queue 'touch tmp/restart.txt'
199
+ end
200
+
201
+ # This optional block defines how a broken release should be cleaned up.
202
+ to :clean do
203
+ queue 'log "failed deployment"'
204
+ end
205
+ end
206
+ end
207
+ ```
208
+
209
+ It works by capturing the *queue*d commands inside the block, wrapping them
210
+ in a deploy script, then *queue*ing them back in.
211
+
212
+ How deploying works
213
+ -------------------
214
+
215
+ Here is an example of a deploy! (Note that some commands have been simplified
216
+ to illustrate the point better.)
217
+
218
+ ### Step 1: Build it
219
+
220
+ The deploy process builds a new temp folder with instructions you provide.
221
+ In this example, it will do `git:clone` and `bundle:install`.
222
+
223
+ ```
224
+ $ mina deploy --verbose
225
+ -----> Creating the build path
226
+ $ mkdir tmp/build-128293482394
227
+ -----> Cloning the Git repository
228
+ $ git clone https://github.com/flipstack/flipstack.git . -n --recursive
229
+ Cloning... done.
230
+ -----> Installing gem dependencies using Bundler
231
+ $ bundle install --without development:test
232
+ Using i18n (0.6.0)
233
+ Using multi_json (1.0.4)
234
+ ...
235
+ Your bundle is complete! It was installed to ./vendor/bundle
236
+ ```
237
+
238
+ ### Step 2: Move it to releases
239
+
240
+ Once the project has been built, it will be moved to `releases/`. A symlink
241
+ called `current/` will be created to point to the active release.
242
+
243
+ ```
244
+ -----> Moving to releases/4
245
+ $ mv "./tmp/build-128293482394" "releases/4"
246
+ -----> Symlinking to current
247
+ $ ln -nfs releases/4 current
248
+ ```
249
+
250
+ ### Step 3: Launch it
251
+
252
+ Invoke the commands queued up in the `to :launch` block. These often
253
+ commands to restart the webserver process. Once this in complete, you're done!
254
+
255
+ ```
256
+ -----> Launching
257
+ $ cd releases/4
258
+ $ sudo service nginx restart
259
+ -----> Done. Deployed v4
260
+ ```
261
+
262
+ ### What about failure?
263
+
264
+ If it fails at any point, the release path will be deleted. If any commands are
265
+ queued using the `to :clean` block, they will be ran. It will be as if nothing
266
+ happened.
267
+
268
+ ```
269
+ # Lets see what happens if a build fails:
270
+ -----> Launching
271
+ $ cd releases/4
272
+ $ sudo service nginx restart
273
+ Starting nginx... error: can't start service
274
+ -----> ERROR: Deploy failed.
275
+ -----> Cleaning up build
276
+ $ rm -rf tmp/build-128293482394
277
+ -----> Unlinking current
278
+ $ ln -nfs releases/3 current
279
+ OK
280
+ ```
281
+
282
+ Directory structure
283
+ -------------------
284
+
285
+ The deploy procedures make the assumption that you have a folder like so:
286
+
287
+ /var/www/flipstack.com/ # The deploy_to path
288
+ |- releases/ # Holds releases, one subdir per release
289
+ | |- 2012-06-12-838948
290
+ | |- 2012-06-23-034828
291
+ | '- ...
292
+ |- shared/ # Holds files shared between releases
293
+ | |- logs/ # Log files are usually stored here
294
+ | `- ...
295
+ '- current/ # A symlink to the current release in releases/
296
+
297
+ It also assumes that the `deploy_to` path is fully writeable/readable for the
298
+ user we're going to SSH with.
299
+
300
+ Configuring settings
301
+ --------------------
302
+
303
+ Settings are managed using the `set` and `settings` methods. This convention is
304
+ inspired by Sinatra and Vlad.
305
+
306
+ ``` ruby
307
+ set :version, "v2.0.5"
308
+
309
+ settings.version #=> "v2.0.5"
310
+ settings.version? #=> true
311
+ ```
312
+
313
+ You can also retrieve settings without the `settings.` prefix.
314
+
315
+ ``` ruby
316
+ set :version, "v2.0.5"
317
+
318
+ version #=> "v2.0.5"
319
+ version? #=> true
320
+ ```
321
+
322
+ ### Dynamic values
323
+
324
+ You can also give settings using a lambda. When the setting is retrieved, it
325
+ will be evaluated.
326
+
327
+ ``` ruby
328
+ set :tag, lambda { "release/#{version}" }
329
+ set :version, "v2.0.5"
330
+
331
+ tag #=> "release/v2.0.5"
332
+ ```
333
+
334
+ ### Inside and outside tasks
335
+
336
+ All of these are accessible inside and outside tasks.
337
+
338
+ ``` ruby
339
+ set :admin_email, "johnsmith@gmail.com"
340
+
341
+ task :email do
342
+ set :message, "Deploy is done"
343
+
344
+ system "echo #{message} | mail #{admin_email}"
345
+ end
346
+ ```
347
+
348
+ ### Validations
349
+
350
+ If you would like an error to be thrown if a setting is not present, add a bang
351
+ at the end.
352
+
353
+ ``` ruby
354
+ task :restart do
355
+ queue "#{settings.nginx_path!}/sbin/nginx restart"
356
+ end
357
+
358
+ # $ mina restart
359
+ # Error: You must set the :nginx_path setting
360
+ ```
361
+
362
+ Defaults
363
+ --------
364
+
365
+ There are a few deploy-related tasks and settings that are on by default.
366
+
367
+ ### Base settings
368
+
369
+ * `verbose_mode` - True if the `--verbose` flag is on, false otherwise. Used to
370
+ signal if commands are to be shown.
371
+
372
+ * `simulate_mode` - True if `--simulate` flag is on, false otherwise. Used to
373
+ signal if no SSH connections are to be made, and the scripts will just be
374
+ printed locally.
375
+
376
+ * `term_mode` - If set to `:pretty`, prettifies the output with indentations.
377
+ (Default with deploys.)
378
+
379
+ ### SSH settings
380
+
381
+ * `domain` - Hostname to SSH to. *Required.*
382
+
383
+ * `user` - Username to connect to SSH with. Optional.
384
+
385
+ * `identity_file` - Local path to the SSH key to use. Optional.
386
+
387
+ ``` ruby
388
+ # Example:
389
+ set :domain, 'flipstack.me'
390
+ set :user, 'flipstack_www'
391
+ set :identity_file, 'flipstack.pem'
392
+ ```
393
+
394
+ ### Deploy settings
395
+
396
+ * `deploy_to` - Path to deploy to. *Required.*
397
+
398
+ * `releases_path` - The path to where releases are kept. Defaults to
399
+ `releases`.
400
+
401
+ * `shared_path` - Where shared files are kept. Defaults to
402
+ `shared`.
403
+
404
+ * `current_path` - The path to the symlink to the current release. Defaults to
405
+ `current`.
406
+
407
+ * `lock_file` - The deploy lock file. A deploy does not start if this file is
408
+ found. Defaults to `deploy.lock`.
409
+
410
+
411
+ ``` ruby
412
+ # Example:
413
+ set :deploy_to, '/var/www/flipstack.me'
414
+ set :releases_path, 'releases'
415
+ set :shared_path, 'shared'
416
+ set :current_path, 'current'
417
+ set :lock_file, 'deploy.lock'
418
+
419
+ # This means the following paths will be
420
+ # created on `mina setup`:
421
+ # /var/www/flipstack.me/
422
+ # /var/www/flipstack.me/releases/
423
+ # /var/www/flipstack.me/shared/
424
+ ```
425
+
426
+ ### Task - setup
427
+
428
+ Prepares the `deploy_to` directory for deployments. Sets up subdirectories and
429
+ sets permissions in the path.
430
+
431
+ $ mina setup
432
+ -----> Setting up
433
+ $ mkdir -p /var/www/kickstack.me
434
+ $ chmod g+r,a+rwx /var/www/kickstack.me
435
+ $ mkdir -p /var/www/kickstack.me/releases
436
+ $ mkdir -p /var/www/kickstack.me/shared
437
+ ...
438
+
439
+ ### Task - deploy:force_unlock
440
+
441
+ Removes the deploy lock file. If a deploy is terminated midway, it may leave a
442
+ lock file to signal that deploys shouldn't be made. This forces the removal of
443
+ that lock file.
444
+
445
+ $ mina deploy
446
+ -----> ERROR: another deployment is ongoing.
447
+ Delete the lock file to continue.
448
+
449
+ $ mina deploy:force_unlock
450
+ -----> Unlocking
451
+ $ rm /var/www/kickstack.me/deploy.lock
452
+
453
+ $ mina deploy
454
+ # The deploy should proceed now
455
+
456
+ Addons: Git
457
+ -----------
458
+
459
+ To deploy projects using git, add this to your `deploy.rb`:
460
+
461
+ ``` ruby
462
+ require 'mina/git'
463
+
464
+ set :repository, 'https://github.com/you/your-app.git'
465
+ ```
466
+
467
+ ### Settings
468
+
469
+ This introduces the following settings:
470
+
471
+ * `repository` - The repository path to clone from. *Required.*
472
+
473
+ * `revision` - The SHA1 of the commit to be deployed. Defaults to whatever is
474
+ the current HEAD in your local copy.
475
+
476
+ ### Task - git:clone
477
+
478
+ Clones from the repo into the current folder.
479
+
480
+ Addons: Bundler
481
+ ---------------
482
+
483
+ To manage Bundler installations, add this to your `deploy.rb`:
484
+
485
+ ``` ruby
486
+ require 'mina/bundler'
487
+ ```
488
+
489
+ ### Settings
490
+
491
+ This introduces the following settings:
492
+
493
+ * `bundle_path` - The path where bundles are going to be installed. Defaults to
494
+ `./vendor/bundler`.
495
+
496
+ * `bundle_options` - Options that will be passed onto `bundle install`.
497
+ Defaults to
498
+ `--without development:test --path "#{bundle_path}" --binstubs bin/
499
+ --deployment"`.
500
+
501
+ ### Task - bundle:install
502
+
503
+ Invokes `bundle:install` on the current directory, creating the bundle
504
+ path (specified in `bundle_path`), and invoking `bundle install`.
505
+
506
+ The `bundle_path` is only created if `bundle_path` is set (which is on
507
+ by default).
508
+
509
+ Addons: Rails
510
+ -------------
511
+
512
+ To manage Rails project installations, add this to your `deploy.rb`:
513
+
514
+ ``` ruby
515
+ require 'mina/rails'
516
+ ```
517
+
518
+ ### Settings
519
+
520
+ This introduces the following settings. All of them are optional.
521
+
522
+ * `bundle_prefix` - Prefix to run commands via Bundler. Defaults to
523
+ `RAILS_ENV="#{rails_env}" bundle exec`.
524
+
525
+ * `rake` - The `rake` command. Defaults to `#{bundle_prefix} rake`.
526
+
527
+ * `rails` - The `rails` command. Defaults to `#{bundle_prefix} rails`.
528
+
529
+ * `rails_env` - The environment to run rake commands in. Defaults to
530
+ `production`.
531
+
532
+ ### Task - rails:db_migrate
533
+
534
+ Invokes rake to migrate the database using `rake db:migrate`.
535
+
536
+ ### Task - rails:assets_precompile
537
+
538
+ Precompiles assets. This invokes `rake assets:precomplie`.
539
+
540
+ It also checks the current version to see if it has assets compiled. If it does,
541
+ it reuses them, skipping the compilation step. To stop this behavior, invoke
542
+ the `mina` command with `force_assets=1`.
543
+
544
+ ### Task - rails:assets_precompile:force
545
+
546
+ Precompiles assets. This always skips the "reuse old assets if possible" step.
547
+
548
+ Development & testing
549
+ ---------------------
550
+
551
+ To test out stuff in development:
552
+
553
+ # Run specs
554
+ $ rspec
555
+ $ rspec -t ssh # Run SSH tests (read test_env/config/deploy.rb first)
556
+ $ rake=0.9 rspec
557
+ $ rake=0.8 rspec
558
+
559
+ # Alias your 'mina' to use it everywhere
560
+ $ alias mina="`pwd -LP`/bin/mina"
561
+
562
+ ### Doing test deploys
563
+
564
+ Try out the test environment:
565
+
566
+ $ cd test_env
567
+ $ mina deploy --simulate
568
+ $ mina deploy
569
+
570
+ # There's an rspec task for it too
571
+ $ rspec -t ssh
572
+
573
+ ### Gem management
574
+
575
+ # To release the gem:
576
+ # Install the Git changelog helper: https://gist.github.com/2880525
577
+ $ vim lib/mina/version.rb
578
+ $ git clog -w
579
+ $ vim HISTORY.md
580
+ $ rake release
581
+
582
+ $ rake build # Builds the gem file
583
+ $ rake install # Installs the gem locally
584
+
585
+ Issues
586
+ ------
587
+
588
+ File issues at the [issue tracker][issues] (github.com). You may also look at
589
+ the [Trello board][trello] (trello.com) we use for development.
590
+
591
+ Acknowledgements
592
+ ----------------
593
+
594
+ © 2012, Nadarei. Released under the [MIT
595
+ License](http://www.opensource.org/licenses/mit-license.php).
596
+
597
+ Mina is authored and maintained by [Rico Sta. Cruz][rsc] and [Michael
598
+ Galero][mg] with help from its [contributors][c]. It is sponsored by our
599
+ startup, [Nadarei][nd].
600
+
601
+ * [Nadarei](http://nadarei.co) (nadarei.co)
602
+ * [Github](http://github.com/nadarei) (@nadarei)
603
+
604
+ Rico:
605
+
606
+ * [My website](http://ricostacruz.com) (ricostacruz.com)
607
+ * [Github](http://github.com/rstacruz) (@rstacruz)
608
+ * [Twitter](http://twitter.com/rstacruz) (@rstacruz)
609
+
610
+ Michael:
611
+
612
+ * [My website][mg] (michaelgalero.com)
613
+ * [Github](http://github.com/mikong) (@mikong)
614
+
615
+ [rsc]: http://ricostacruz.com
616
+ [mg]: http://devblog.michaelgalero.com/
617
+ [c]: http://github.com/nadarei/mina/contributors
618
+ [nd]: http://nadarei.co
619
+ [issues]: https://github.com/nadarei/mina/issues
620
+ [trello]: https://trello.com/board/mina/4fc8b3023d9c9a4d72e573e6