crazycode-cap-recipes 0.3.37

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 (86) hide show
  1. data/LICENSE +20 -0
  2. data/README.textile +586 -0
  3. data/Rakefile +57 -0
  4. data/VERSION.yml +5 -0
  5. data/bin/cap-recipes +4 -0
  6. data/cap-recipes.gemspec +128 -0
  7. data/examples/advanced/deploy.rb +39 -0
  8. data/examples/advanced/deploy/experimental.rb +14 -0
  9. data/examples/advanced/deploy/production.rb +20 -0
  10. data/examples/simple/deploy.rb +36 -0
  11. data/lib/cap_recipes.rb +1 -0
  12. data/lib/cap_recipes/tasks/apache.rb +1 -0
  13. data/lib/cap_recipes/tasks/apache/install.rb +16 -0
  14. data/lib/cap_recipes/tasks/apache/manage.rb +26 -0
  15. data/lib/cap_recipes/tasks/aptitude.rb +1 -0
  16. data/lib/cap_recipes/tasks/aptitude/manage.rb +32 -0
  17. data/lib/cap_recipes/tasks/backgroundrb.rb +1 -0
  18. data/lib/cap_recipes/tasks/backgroundrb/hooks.rb +5 -0
  19. data/lib/cap_recipes/tasks/backgroundrb/manage.rb +64 -0
  20. data/lib/cap_recipes/tasks/bundler.rb +1 -0
  21. data/lib/cap_recipes/tasks/bundler/manage.rb +31 -0
  22. data/lib/cap_recipes/tasks/delayed_job.rb +1 -0
  23. data/lib/cap_recipes/tasks/delayed_job/hooks.rb +5 -0
  24. data/lib/cap_recipes/tasks/delayed_job/manage.rb +34 -0
  25. data/lib/cap_recipes/tasks/ec2/install.rb +32 -0
  26. data/lib/cap_recipes/tasks/ec2/manage.rb +32 -0
  27. data/lib/cap_recipes/tasks/gitosis.rb +1 -0
  28. data/lib/cap_recipes/tasks/gitosis/install.rb +58 -0
  29. data/lib/cap_recipes/tasks/gitosis/manage.rb +3 -0
  30. data/lib/cap_recipes/tasks/hudson.rb +1 -0
  31. data/lib/cap_recipes/tasks/hudson/manage.rb +33 -0
  32. data/lib/cap_recipes/tasks/jetty.rb +1 -0
  33. data/lib/cap_recipes/tasks/jetty/install.rb +33 -0
  34. data/lib/cap_recipes/tasks/jetty/manage.rb +34 -0
  35. data/lib/cap_recipes/tasks/jetty/web.rb +98 -0
  36. data/lib/cap_recipes/tasks/juggernaut.rb +3 -0
  37. data/lib/cap_recipes/tasks/juggernaut/hooks.rb +4 -0
  38. data/lib/cap_recipes/tasks/juggernaut/manage.rb +56 -0
  39. data/lib/cap_recipes/tasks/maven.rb +85 -0
  40. data/lib/cap_recipes/tasks/memcache.rb +3 -0
  41. data/lib/cap_recipes/tasks/memcache/hooks.rb +5 -0
  42. data/lib/cap_recipes/tasks/memcache/install.rb +15 -0
  43. data/lib/cap_recipes/tasks/memcache/manage.rb +37 -0
  44. data/lib/cap_recipes/tasks/mongodb.rb +1 -0
  45. data/lib/cap_recipes/tasks/mongodb/install.rb +137 -0
  46. data/lib/cap_recipes/tasks/mongodb/manage.rb +27 -0
  47. data/lib/cap_recipes/tasks/passenger.rb +1 -0
  48. data/lib/cap_recipes/tasks/passenger/install.rb +72 -0
  49. data/lib/cap_recipes/tasks/passenger/manage.rb +23 -0
  50. data/lib/cap_recipes/tasks/rails.rb +1 -0
  51. data/lib/cap_recipes/tasks/rails/hooks.rb +6 -0
  52. data/lib/cap_recipes/tasks/rails/manage.rb +51 -0
  53. data/lib/cap_recipes/tasks/ruby.rb +1 -0
  54. data/lib/cap_recipes/tasks/ruby/install.rb +16 -0
  55. data/lib/cap_recipes/tasks/rubygems.rb +1 -0
  56. data/lib/cap_recipes/tasks/rubygems/install.rb +22 -0
  57. data/lib/cap_recipes/tasks/rubygems/manage.rb +43 -0
  58. data/lib/cap_recipes/tasks/templates/hudson.erb +85 -0
  59. data/lib/cap_recipes/tasks/templates/mongod.conf.erb +89 -0
  60. data/lib/cap_recipes/tasks/templates/mongodb.init.erb +73 -0
  61. data/lib/cap_recipes/tasks/templates/mongodb.repo.erb +4 -0
  62. data/lib/cap_recipes/tasks/templates/mongos.init.erb +69 -0
  63. data/lib/cap_recipes/tasks/templates/tomcat.erb +95 -0
  64. data/lib/cap_recipes/tasks/thinking_sphinx.rb +1 -0
  65. data/lib/cap_recipes/tasks/thinking_sphinx/hooks.rb +4 -0
  66. data/lib/cap_recipes/tasks/thinking_sphinx/install.rb +17 -0
  67. data/lib/cap_recipes/tasks/thinking_sphinx/manage.rb +65 -0
  68. data/lib/cap_recipes/tasks/tomcat.rb +1 -0
  69. data/lib/cap_recipes/tasks/tomcat/install.rb +43 -0
  70. data/lib/cap_recipes/tasks/tomcat/manage.rb +34 -0
  71. data/lib/cap_recipes/tasks/tomcat/war.rb +98 -0
  72. data/lib/cap_recipes/tasks/utilities.rb +172 -0
  73. data/lib/cap_recipes/tasks/whenever.rb +1 -0
  74. data/lib/cap_recipes/tasks/whenever/hooks.rb +5 -0
  75. data/lib/cap_recipes/tasks/whenever/manage.rb +8 -0
  76. data/lib/cap_recipes/tasks/yum.rb +1 -0
  77. data/lib/cap_recipes/tasks/yum/manage.rb +30 -0
  78. data/lib/capify.rb +35 -0
  79. data/lib/templates/Capfile.tt +4 -0
  80. data/lib/templates/deploy.rb.tt +30 -0
  81. data/spec/cap/all/Capfile +2 -0
  82. data/spec/cap/helper.rb +3 -0
  83. data/spec/cap_recipes_spec.rb +56 -0
  84. data/spec/spec_helper.rb +37 -0
  85. data/specs.watchr +35 -0
  86. metadata +155 -0
@@ -0,0 +1 @@
1
+ Dir[File.join(File.dirname(__FILE__), 'whenever/*.rb')].sort.each { |lib| require lib }
@@ -0,0 +1,5 @@
1
+ Capistrano::Configuration.instance(true).load do
2
+
3
+ after "deploy:symlink", "whenever:update_crontab" # update crontab after symlink
4
+
5
+ end
@@ -0,0 +1,8 @@
1
+ Capistrano::Configuration.instance(true).load do
2
+ namespace :whenever do
3
+ desc "Update the crontab file"
4
+ task :update_crontab, :roles => :db do
5
+ run "cd #{release_path} && whenever --update-crontab #{application}"
6
+ end
7
+ end
8
+ end
@@ -0,0 +1 @@
1
+ Dir[File.join(File.dirname(__FILE__), 'yum/*.rb')].sort.each { |lib| require lib }
@@ -0,0 +1,30 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../utilities')
2
+
3
+ Capistrano::Configuration.instance(true).load do
4
+ namespace :yum do
5
+ desc "Updates all installed packages on yum package system"
6
+ task :updates do
7
+ utilities.yum_update
8
+ end
9
+
10
+ desc "Installs a specified yum package"
11
+ task :install do
12
+ yum_pkg_name = utilities.ask "Enter name of the package(s) you wish to install:"
13
+ raise "Please specify yum_pkg_name" if yum_pkg_name == ''
14
+ logger.info "Updating packages..."
15
+ sudo "yum update"
16
+ logger.info "Installing #{yum_pkg_name}..."
17
+ utilities.yum_install yum_pkg_name
18
+ end
19
+
20
+ desc "Removes a specified yum package"
21
+ task :remove do
22
+ yum_pkg_name = utilities.ask "Enter name of the package(s) you wish to remove:"
23
+ raise "Please specify yum_pkg_name" if yum_pkg_name == ''
24
+ logger.info "Updating packages..."
25
+ sudo "yum update"
26
+ logger.info "Removing #{yum_pkg_name}..."
27
+ utilities.sudo_with_input "yum erase -y #{yum_pkg_name}", /^Do you want to continue\?/
28
+ end
29
+ end
30
+ end
data/lib/capify.rb ADDED
@@ -0,0 +1,35 @@
1
+ require 'rubygems'
2
+ require 'thor/group'
3
+ # require File.dirname(__FILE__) + "/../lib/templates"
4
+
5
+ class CapRecipes < Thor::Group
6
+ include Thor::Actions
7
+
8
+ def self.source_root; File.expand_path(File.dirname(__FILE__)); end
9
+ def self.banner; "cap-recipes [path] task task2 task3"; end
10
+
11
+ desc "Description: Generate deploy.rb file with desired tasks!"
12
+
13
+ argument :path, :desc => "path to capify", :type => :string, :default => '.'
14
+ argument :requires, :desc => "list of tasks to require", :type => :array, :default => []
15
+ class_option :list, :desc => "list all recipes", :aliases => '-l', :type => :boolean, :default => false
16
+
17
+ def capify
18
+ unless options[:list]
19
+ capfile_temp = "templates/Capfile.tt"
20
+ deploy_temp = "templates/deploy.rb.tt"
21
+ @recipes = requires.collect { |task| "require 'cap_recipes/tasks/#{task}'" }.join("\n")
22
+ template capfile_temp, File.join(path,'/Capfile')
23
+ template deploy_temp, File.join(path,'/config/deploy.rb')
24
+ else
25
+ folders = Dir.glob( File.dirname(__FILE__) + "/../lib/cap_recipes/tasks/*.rb").inject({}) do |packages,file|
26
+ desc = IO.readlines(file).first
27
+ packages[File.basename(file, ".rb")] = ((desc =~ /#/) ? desc : "No description")
28
+ packages
29
+ end
30
+ puts "Available Recipes:\n"
31
+ puts folders.collect { |folder,desc| "\t* #{folder} - #{desc}"}.join("\n")
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,4 @@
1
+ load 'deploy' if respond_to?(:namespace) # cap2 differentiator
2
+ Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
3
+
4
+ load 'config/deploy' # remove this line to skip loading any of the default tasks
@@ -0,0 +1,30 @@
1
+ # =============================================================================
2
+ # GENERAL SETTINGS
3
+ # =============================================================================
4
+
5
+ role :web, "demo.app.com"
6
+ role :app, "demo.app.com"
7
+ role :db, "demo.app.com", :primary => true
8
+
9
+ set :application, "demo"
10
+ set :deploy_to, "/var/apps/#{application}"
11
+ set :deploy_via, :remote_cache
12
+ set :scm, :git
13
+ set :repository, "deploy@dev.demo.com:/home/demo.git"
14
+ set :git_enable_submodules, 1
15
+ set :keep_releases, 3
16
+ set :user, "deploy"
17
+ set :runner, "deploy"
18
+ set :password, "demo567"
19
+ set :use_sudo, true
20
+ set :branch, "master"
21
+
22
+ ssh_options[:paranoid] = false
23
+ default_run_options[:pty] = true
24
+
25
+ # =============================================================================
26
+ # RECIPE INCLUDES
27
+ # =============================================================================
28
+
29
+ require 'rubygems'
30
+ <%= @recipes %>
@@ -0,0 +1,2 @@
1
+ require File.join(File.dirname(__FILE__),'..','helper')
2
+ require 'cap_recipes'
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH << File.join(File.dirname(__FILE__),'..','..','lib')
2
+ $LOAD_PATH << File.join(File.dirname(__FILE__),'..','..','bin')
3
+ def current_path;end
@@ -0,0 +1,56 @@
1
+ require File.expand_path("spec_helper", File.dirname(__FILE__))
2
+ require File.dirname(__FILE__) + '/../lib/capify'
3
+
4
+ describe 'loading everything' do
5
+ def run_cap(folder,task)
6
+ folder = File.join(File.dirname(__FILE__),'cap',folder)
7
+ `cd #{folder} && #{task}`
8
+ end
9
+
10
+ it "finds all tasks" do
11
+ tasks = run_cap 'all', 'cap -T'
12
+ tasks.split("\n").size.should >= 20
13
+ end
14
+ end
15
+
16
+ describe "cap-recipes command" do
17
+
18
+ before(:all) do
19
+ @test_path = 'test/'
20
+ @cap_recipes = CapRecipes.dup
21
+ @cap_file = File.join @test_path, 'Capfile'
22
+ @deploy_file = File.join @test_path, 'config/deploy.rb'
23
+ end
24
+
25
+ after(:each) do
26
+ `rm -rf #{@test_path}`
27
+ end
28
+
29
+ it "should show the description on --help" do
30
+ capture(:stdout) { @cap_recipes.start(['--help']) }.should match(/Usage/)
31
+ end
32
+
33
+ it "should show the list of recipes" do
34
+ capture(:stdout) { @cap_recipes.start(['--list']) }.should match(/Available Recipes/)
35
+ end
36
+
37
+ it "should generate Capfile and config/deploy.rb" do
38
+ capture(:stdout) { @cap_recipes.start([@test_path]) }.should match(/create/)
39
+ File.exists?(@cap_file).should be_true
40
+ File.exists?(@deploy_file).should be_true
41
+ end
42
+
43
+ it "should generate deploy.rb with apache" do
44
+ capture(:stdout) { @cap_recipes.start([@test_path,'apache']) }.should match(/create/)
45
+ File.open(@deploy_file).read.should match(/require \'cap_recipes\/tasks\/apache\'/)
46
+ end
47
+
48
+ it "should generate deploy.rb with passenger and gitosis" do
49
+ capture(:stdout) { @cap_recipes.start([@test_path,"passenger","gitosis"]) }.should match(/create/)
50
+ response = File.open(@deploy_file).read
51
+ response.should match(/require \'cap_recipes\/tasks\/passenger\'/)
52
+ response.should match(/require \'cap_recipes\/tasks\/gitosis\'/)
53
+ end
54
+
55
+
56
+ end
@@ -0,0 +1,37 @@
1
+ # ---- requirements
2
+ require 'rubygems'
3
+ require 'spec'
4
+ require 'redgreen'
5
+
6
+ $LOAD_PATH << File.expand_path("../lib", File.dirname(__FILE__))
7
+ $LOAD_PATH << File.join(File.dirname(__FILE__),'..','..','bin')
8
+ # ---- bugfix
9
+ #`exit?': undefined method `run?' for Test::Unit:Module (NoMethodError)
10
+ #can be solved with require test/unit but this will result in extra test-output
11
+ module Test
12
+ module Unit
13
+ def self.run?
14
+ true
15
+ end
16
+ end
17
+ end
18
+
19
+ Spec::Runner.configure do |config|
20
+ config.mock_with :rr
21
+
22
+ def capture(stream)
23
+ begin
24
+ stream = stream.to_s
25
+ eval "$#{stream} = StringIO.new"
26
+ yield
27
+ result = eval("$#{stream}").string
28
+ ensure
29
+ eval("$#{stream} = #{stream.upcase}")
30
+ end
31
+
32
+ result
33
+ end
34
+
35
+ def fake; end
36
+
37
+ end
data/specs.watchr ADDED
@@ -0,0 +1,35 @@
1
+ # Run me with:
2
+ #
3
+ # $ watchr specs.watchr
4
+
5
+ # --------------------------------------------------
6
+ # Helpers
7
+ # --------------------------------------------------
8
+ def run(cmd)
9
+ puts(cmd)
10
+ system(cmd)
11
+ end
12
+
13
+ def run_all_tests
14
+ # see Rakefile for the definition of the test:all task
15
+ system( "rake spec VERBOSE=true" )
16
+ end
17
+
18
+ # --------------------------------------------------
19
+ # Watchr Rules
20
+ # --------------------------------------------------
21
+ watch("^lib/(.*)\.rb") { |m| run("spec spec/cap_recipes_spec.rb -c") }
22
+ watch("spec.*/spec_helper\.rb") { run_all_tests }
23
+ watch('^spec.*/(.*)_spec\.rb') { |m| run("spec spec/#{m[1]}_spec.rb -c")}
24
+
25
+ # --------------------------------------------------
26
+ # Signal Handling
27
+ # --------------------------------------------------
28
+ # Ctrl-\
29
+ Signal.trap('QUIT') do
30
+ puts " --- Running all tests ---\n\n"
31
+ run_all_tests
32
+ end
33
+
34
+ # Ctrl-C
35
+ Signal.trap('INT') { abort("\n") }
metadata ADDED
@@ -0,0 +1,155 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: crazycode-cap-recipes
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 3
8
+ - 37
9
+ version: 0.3.37
10
+ platform: ruby
11
+ authors:
12
+ - crazycode
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-04-22 00:00:00 +08:00
18
+ default_executable: cap-recipes
19
+ dependencies: []
20
+
21
+ description: Battle-tested capistrano recipes for debian, passenger, apache, hudson, delayed_job, juggernaut, rubygems, backgroundrb, rails and more
22
+ email: crazycode@gmail.com
23
+ executables:
24
+ - cap-recipes
25
+ extensions: []
26
+
27
+ extra_rdoc_files:
28
+ - LICENSE
29
+ - README.textile
30
+ files:
31
+ - LICENSE
32
+ - README.textile
33
+ - Rakefile
34
+ - VERSION.yml
35
+ - bin/cap-recipes
36
+ - cap-recipes.gemspec
37
+ - examples/advanced/deploy.rb
38
+ - examples/advanced/deploy/experimental.rb
39
+ - examples/advanced/deploy/production.rb
40
+ - examples/simple/deploy.rb
41
+ - lib/cap_recipes.rb
42
+ - lib/cap_recipes/tasks/apache.rb
43
+ - lib/cap_recipes/tasks/apache/install.rb
44
+ - lib/cap_recipes/tasks/apache/manage.rb
45
+ - lib/cap_recipes/tasks/aptitude.rb
46
+ - lib/cap_recipes/tasks/aptitude/manage.rb
47
+ - lib/cap_recipes/tasks/backgroundrb.rb
48
+ - lib/cap_recipes/tasks/backgroundrb/hooks.rb
49
+ - lib/cap_recipes/tasks/backgroundrb/manage.rb
50
+ - lib/cap_recipes/tasks/bundler.rb
51
+ - lib/cap_recipes/tasks/bundler/manage.rb
52
+ - lib/cap_recipes/tasks/delayed_job.rb
53
+ - lib/cap_recipes/tasks/delayed_job/hooks.rb
54
+ - lib/cap_recipes/tasks/delayed_job/manage.rb
55
+ - lib/cap_recipes/tasks/ec2/install.rb
56
+ - lib/cap_recipes/tasks/ec2/manage.rb
57
+ - lib/cap_recipes/tasks/gitosis.rb
58
+ - lib/cap_recipes/tasks/gitosis/install.rb
59
+ - lib/cap_recipes/tasks/gitosis/manage.rb
60
+ - lib/cap_recipes/tasks/hudson.rb
61
+ - lib/cap_recipes/tasks/hudson/manage.rb
62
+ - lib/cap_recipes/tasks/jetty.rb
63
+ - lib/cap_recipes/tasks/jetty/install.rb
64
+ - lib/cap_recipes/tasks/jetty/manage.rb
65
+ - lib/cap_recipes/tasks/jetty/web.rb
66
+ - lib/cap_recipes/tasks/juggernaut.rb
67
+ - lib/cap_recipes/tasks/juggernaut/hooks.rb
68
+ - lib/cap_recipes/tasks/juggernaut/manage.rb
69
+ - lib/cap_recipes/tasks/maven.rb
70
+ - lib/cap_recipes/tasks/memcache.rb
71
+ - lib/cap_recipes/tasks/memcache/hooks.rb
72
+ - lib/cap_recipes/tasks/memcache/install.rb
73
+ - lib/cap_recipes/tasks/memcache/manage.rb
74
+ - lib/cap_recipes/tasks/mongodb.rb
75
+ - lib/cap_recipes/tasks/mongodb/install.rb
76
+ - lib/cap_recipes/tasks/mongodb/manage.rb
77
+ - lib/cap_recipes/tasks/passenger.rb
78
+ - lib/cap_recipes/tasks/passenger/install.rb
79
+ - lib/cap_recipes/tasks/passenger/manage.rb
80
+ - lib/cap_recipes/tasks/rails.rb
81
+ - lib/cap_recipes/tasks/rails/hooks.rb
82
+ - lib/cap_recipes/tasks/rails/manage.rb
83
+ - lib/cap_recipes/tasks/ruby.rb
84
+ - lib/cap_recipes/tasks/ruby/install.rb
85
+ - lib/cap_recipes/tasks/rubygems.rb
86
+ - lib/cap_recipes/tasks/rubygems/install.rb
87
+ - lib/cap_recipes/tasks/rubygems/manage.rb
88
+ - lib/cap_recipes/tasks/templates/hudson.erb
89
+ - lib/cap_recipes/tasks/templates/mongod.conf.erb
90
+ - lib/cap_recipes/tasks/templates/mongodb.init.erb
91
+ - lib/cap_recipes/tasks/templates/mongodb.repo.erb
92
+ - lib/cap_recipes/tasks/templates/mongos.init.erb
93
+ - lib/cap_recipes/tasks/templates/tomcat.erb
94
+ - lib/cap_recipes/tasks/thinking_sphinx.rb
95
+ - lib/cap_recipes/tasks/thinking_sphinx/hooks.rb
96
+ - lib/cap_recipes/tasks/thinking_sphinx/install.rb
97
+ - lib/cap_recipes/tasks/thinking_sphinx/manage.rb
98
+ - lib/cap_recipes/tasks/tomcat.rb
99
+ - lib/cap_recipes/tasks/tomcat/install.rb
100
+ - lib/cap_recipes/tasks/tomcat/manage.rb
101
+ - lib/cap_recipes/tasks/tomcat/war.rb
102
+ - lib/cap_recipes/tasks/utilities.rb
103
+ - lib/cap_recipes/tasks/whenever.rb
104
+ - lib/cap_recipes/tasks/whenever/hooks.rb
105
+ - lib/cap_recipes/tasks/whenever/manage.rb
106
+ - lib/cap_recipes/tasks/yum.rb
107
+ - lib/cap_recipes/tasks/yum/manage.rb
108
+ - lib/capify.rb
109
+ - lib/templates/Capfile.tt
110
+ - lib/templates/deploy.rb.tt
111
+ - spec/cap/all/Capfile
112
+ - spec/cap/helper.rb
113
+ - spec/cap_recipes_spec.rb
114
+ - spec/spec_helper.rb
115
+ - specs.watchr
116
+ has_rdoc: true
117
+ homepage: http://github.com/crazycode/cap-recipes
118
+ licenses: []
119
+
120
+ post_install_message:
121
+ rdoc_options: []
122
+
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ none: false
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ segments:
131
+ - 0
132
+ version: "0"
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ none: false
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ segments:
139
+ - 0
140
+ version: "0"
141
+ requirements: []
142
+
143
+ rubyforge_project: crazycode-cap-recipes
144
+ rubygems_version: 1.3.7
145
+ signing_key:
146
+ specification_version: 3
147
+ summary: Battle-tested capistrano recipes for passenger, delayed_job, and more
148
+ test_files:
149
+ - examples/advanced/deploy.rb
150
+ - examples/advanced/deploy/experimental.rb
151
+ - examples/advanced/deploy/production.rb
152
+ - examples/simple/deploy.rb
153
+ - spec/cap/helper.rb
154
+ - spec/cap_recipes_spec.rb
155
+ - spec/spec_helper.rb