cap-recipes 0.3.18
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/LICENSE +20 -0
- data/README.textile +357 -0
- data/Rakefile +45 -0
- data/VERSION.yml +4 -0
- data/cap-recipes.gemspec +87 -0
- data/examples/advanced/deploy.rb +39 -0
- data/examples/advanced/deploy/experimental.rb +14 -0
- data/examples/advanced/deploy/production.rb +20 -0
- data/examples/simple/deploy.rb +36 -0
- data/lib/cap_recipes.rb +1 -0
- data/lib/cap_recipes/tasks/apache.rb +1 -0
- data/lib/cap_recipes/tasks/apache/install.rb +12 -0
- data/lib/cap_recipes/tasks/apache/manage.rb +26 -0
- data/lib/cap_recipes/tasks/aptitude.rb +1 -0
- data/lib/cap_recipes/tasks/aptitude/manage.rb +34 -0
- data/lib/cap_recipes/tasks/backgroundrb.rb +1 -0
- data/lib/cap_recipes/tasks/backgroundrb/hooks.rb +5 -0
- data/lib/cap_recipes/tasks/backgroundrb/manage.rb +64 -0
- data/lib/cap_recipes/tasks/delayed_job.rb +1 -0
- data/lib/cap_recipes/tasks/delayed_job/hooks.rb +5 -0
- data/lib/cap_recipes/tasks/delayed_job/manage.rb +32 -0
- data/lib/cap_recipes/tasks/juggernaut.rb +1 -0
- data/lib/cap_recipes/tasks/juggernaut/hooks.rb +4 -0
- data/lib/cap_recipes/tasks/juggernaut/manage.rb +54 -0
- data/lib/cap_recipes/tasks/memcache.rb +1 -0
- data/lib/cap_recipes/tasks/memcache/hooks.rb +5 -0
- data/lib/cap_recipes/tasks/memcache/install.rb +13 -0
- data/lib/cap_recipes/tasks/memcache/manage.rb +35 -0
- data/lib/cap_recipes/tasks/passenger.rb +1 -0
- data/lib/cap_recipes/tasks/passenger/install.rb +62 -0
- data/lib/cap_recipes/tasks/passenger/manage.rb +24 -0
- data/lib/cap_recipes/tasks/rails.rb +1 -0
- data/lib/cap_recipes/tasks/rails/hooks.rb +8 -0
- data/lib/cap_recipes/tasks/rails/manage.rb +53 -0
- data/lib/cap_recipes/tasks/rubygems.rb +1 -0
- data/lib/cap_recipes/tasks/rubygems/manage.rb +43 -0
- data/lib/cap_recipes/tasks/utilities.rb +114 -0
- data/lib/cap_recipes/tasks/whenever.rb +1 -0
- data/lib/cap_recipes/tasks/whenever/hooks.rb +5 -0
- data/lib/cap_recipes/tasks/whenever/manage.rb +10 -0
- data/spec/cap/all/Capfile +2 -0
- data/spec/cap/helper.rb +2 -0
- data/spec/cap_recipes_spec.rb +13 -0
- data/spec/spec_helper.rb +16 -0
- metadata +106 -0
@@ -0,0 +1 @@
|
|
1
|
+
Dir[File.join(File.dirname(__FILE__), 'passenger/*.rb')].sort.each { |lib| require lib }
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'cap_recipes/tasks/utilities.rb'
|
2
|
+
|
3
|
+
#TODO add something like require that a task named apache:restart exists
|
4
|
+
Capistrano::Configuration.instance(true).load do
|
5
|
+
set :base_ruby_path, '/usr'
|
6
|
+
set :confd_passenger_filename, 'passenger'
|
7
|
+
|
8
|
+
namespace :passenger do
|
9
|
+
desc "Installs Phusion Passenger"
|
10
|
+
task :install, :roles => :web do
|
11
|
+
puts 'Installing passenger module'
|
12
|
+
enable_apache_module
|
13
|
+
update_config
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "Setup Passenger Module"
|
17
|
+
task :enable_apache_module, :roles => :web do
|
18
|
+
sudo "#{base_ruby_path}/bin/gem install passenger --no-ri --no-rdoc"
|
19
|
+
sudo "#{base_ruby_path}/bin/passenger-install-apache2-module --auto"
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Configure Passenger"
|
23
|
+
task :update_config, :roles => :web do
|
24
|
+
version = 'ERROR' # default
|
25
|
+
|
26
|
+
# passenger (2.X.X, 1.X.X)
|
27
|
+
run("gem list | grep passenger") do |ch, stream, data|
|
28
|
+
version = data.sub(/passenger \(([^,]+).*?\)/,"\\1").strip
|
29
|
+
end
|
30
|
+
|
31
|
+
puts " passenger version #{version} configured"
|
32
|
+
|
33
|
+
passenger_config =<<-EOF
|
34
|
+
LoadModule passenger_module #{base_ruby_path}/lib/ruby/gems/1.8/gems/passenger-#{version}/ext/apache2/mod_passenger.so
|
35
|
+
PassengerRoot #{base_ruby_path}/lib/ruby/gems/1.8/gems/passenger-#{version}
|
36
|
+
PassengerRuby #{base_ruby_path}/bin/ruby
|
37
|
+
EOF
|
38
|
+
|
39
|
+
put passenger_config, "/tmp/passenger"
|
40
|
+
sudo "mv /tmp/passenger /etc/apache2/conf.d/#{confd_passenger_filename}"
|
41
|
+
apache.restart
|
42
|
+
end
|
43
|
+
|
44
|
+
# if you want to add more options, try this, in your own conifg
|
45
|
+
# read this first... http://www.modrails.com/documentation/Users%20guide.html
|
46
|
+
# namespace :passenger do
|
47
|
+
# task :add_custom_configuration, :roles=>:web do
|
48
|
+
# #512 - 100(stack) - 4*100(instance)
|
49
|
+
# passenger_config = <<EOF
|
50
|
+
# PassengerMaxPoolSize 4
|
51
|
+
# PassengerPoolIdleTime 3000
|
52
|
+
# EOF
|
53
|
+
# put passenger_config, "/tmp/passenger"
|
54
|
+
# sudo "cat /tmp/passenger >> /etc/apache2/conf.d/passenger"
|
55
|
+
# apache.restart
|
56
|
+
# end
|
57
|
+
# end
|
58
|
+
# after "passenger:update_config", *%w(
|
59
|
+
# passenger:add_custom_configuration
|
60
|
+
# )
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'cap_recipes/tasks/utilities.rb'
|
2
|
+
|
3
|
+
Capistrano::Configuration.instance(true).load do
|
4
|
+
namespace :deploy do
|
5
|
+
|
6
|
+
desc "Stops the phusion passenger server"
|
7
|
+
task :stop, :roles => :web do
|
8
|
+
puts "Stopping rails web server"
|
9
|
+
apache.stop
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "Starts the phusion passenger server"
|
13
|
+
task :start, :roles => :web do
|
14
|
+
puts "Starting rails web server"
|
15
|
+
apache.start
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "Restarts the phusion passenger server"
|
19
|
+
task :restart, :roles => :web do
|
20
|
+
run "touch #{current_path}/tmp/restart.txt"
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Dir[File.join(File.dirname(__FILE__), 'rails/*.rb')].sort.each { |lib| require lib }
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require 'cap_recipes/tasks/utilities.rb'
|
2
|
+
|
3
|
+
Capistrano::Configuration.instance(true).load do
|
4
|
+
after "deploy:update_code", "rails:symlink_db_config" # copy database.yml file to release path
|
5
|
+
after "deploy:update_code", "rails:sweep:cache" # clear cache after updating code
|
6
|
+
after "deploy:restart" , "rails:repair_permissions" # fix the permissions to work properly
|
7
|
+
after "deploy:restart" , "rails:ping" # ping passenger to start the rails instance
|
8
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'cap_recipes/tasks/utilities.rb'
|
2
|
+
|
3
|
+
Capistrano::Configuration.instance(true).load do
|
4
|
+
set :local_ping_path, 'http://localhost'
|
5
|
+
|
6
|
+
namespace :rails do
|
7
|
+
# ===============================================================
|
8
|
+
# UTILITY TASKS
|
9
|
+
# ===============================================================
|
10
|
+
desc "Symlinks the shared/config/database yaml to release/config/"
|
11
|
+
task :symlink_db_config, :roles => :app do
|
12
|
+
puts "Copying database configuration to release path"
|
13
|
+
try_sudo "rm #{release_path}/config/database.yml -f"
|
14
|
+
try_sudo "ln -s #{shared_path}/config/database.yml #{release_path}/config/database.yml"
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Repair permissions to allow user to perform all actions"
|
18
|
+
task :repair_permissions, :roles => :app do
|
19
|
+
puts "Applying correct permissions to allow for proper command execution"
|
20
|
+
try_sudo "chmod -R 744 #{current_path}/log #{current_path}/tmp"
|
21
|
+
try_sudo "chown -R #{user}:#{user} #{current_path}"
|
22
|
+
try_sudo "chown -R #{user}:#{user} #{current_path}/tmp"
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "Displays the production log from the server locally"
|
26
|
+
task :tail, :roles => :app do
|
27
|
+
stream "tail -f #{shared_path}/log/production.log"
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "Pings localhost to startup server"
|
31
|
+
task :ping, :roles => :app do
|
32
|
+
puts "Pinging the web server to start it"
|
33
|
+
run "wget -O /dev/null #{local_ping_path} 2>/dev/null"
|
34
|
+
end
|
35
|
+
|
36
|
+
# ===============================================================
|
37
|
+
# MAINTENANCE TASKS
|
38
|
+
# ===============================================================
|
39
|
+
namespace :sweep do
|
40
|
+
desc "Clear file-based fragment and action caching"
|
41
|
+
task :log, :roles => :app do
|
42
|
+
puts "Sweeping all the log files"
|
43
|
+
run "cd #{current_path} && #{sudo} rake log:clear RAILS_ENV=production"
|
44
|
+
end
|
45
|
+
|
46
|
+
desc "Clear file-based fragment and action caching"
|
47
|
+
task :cache, :roles => :app do
|
48
|
+
puts "Sweeping the fragment and action cache stores"
|
49
|
+
run "cd #{release_path} && #{sudo} rake tmp:cache:clear RAILS_ENV=production"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Dir[File.join(File.dirname(__FILE__), 'rubygems/*.rb')].sort.each { |lib| require lib }
|
@@ -0,0 +1,43 @@
|
|
1
|
+
Capistrano::Configuration.instance(true).load do
|
2
|
+
set :rubygem_paths, '/usr/bin/gem'
|
3
|
+
|
4
|
+
namespace :rubygems do
|
5
|
+
desc "Performs a rubygems upgrade, updates all gems and cleans up old ones"
|
6
|
+
task :full_update, :roles => :app do
|
7
|
+
rubygems.upgrade
|
8
|
+
rubygems.update
|
9
|
+
rubygems.cleanup
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "Upgrades the rubygem package installation"
|
13
|
+
task :upgrade, :roles => :app do
|
14
|
+
Array(rubygem_paths).each { |path| sudo "#{path} update --system" }
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Updates all installed gems"
|
18
|
+
task :update, :roles => :app do
|
19
|
+
Array(rubygem_paths).each { |path| sudo "#{path} update" }
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Removes old gems which are now outdated"
|
23
|
+
task :cleanup, :roles => :app do
|
24
|
+
Array(rubygem_paths).each { |path| sudo "#{path} cleanup" }
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Install a gem on your servers servers"
|
28
|
+
task :install, :roles => :app do
|
29
|
+
puts "Enter the name of the gem you'd like to install:"
|
30
|
+
gem_name = $stdin.gets.chomp
|
31
|
+
logger.info "trying to install '#{gem_name}'"
|
32
|
+
Array(rubygem_paths).each {|path| sudo "#{path} install #{gem_name} --no-ri --no-rdoc" }
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Uninstall a gem from the release servers"
|
36
|
+
task :uninstall, :roles => :app do
|
37
|
+
puts "Enter the name of the gem you'd like to remove:"
|
38
|
+
gem_name = $stdin.gets.chomp
|
39
|
+
logger.info "trying to remove '#{gem_name}'"
|
40
|
+
Array(rubygem_paths).each { |path| sudo "#{path} uninstall #{gem_name} -x" }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Utilities
|
4
|
+
# utilities.config_gsub('/etc/example', /(.*)/im, "\\1")
|
5
|
+
def config_gsub(file, find, replace)
|
6
|
+
tmp="/tmp/#{File.basename(file)}"
|
7
|
+
get file, tmp
|
8
|
+
content=File.open(tmp).read
|
9
|
+
content.gsub!(find,replace)
|
10
|
+
put content, tmp
|
11
|
+
sudo "mv #{tmp} #{file}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def sudo_upload(from, to, options={}, &block)
|
15
|
+
top.upload from, "/tmp/#{File.basename(to)}", options, &block
|
16
|
+
sudo "mv /tmp/#{File.basename(to)} #{to}"
|
17
|
+
sudo "chmod #{options[:mode]} #{to}" if options[:mode]
|
18
|
+
sudo "chown #{options[:owner]} #{to}" if options[:owner]
|
19
|
+
end
|
20
|
+
|
21
|
+
def adduser(user, options={})
|
22
|
+
options[:shell] ||= '/bin/bash' # new accounts on ubuntu 6.06.1 have been getting /bin/sh
|
23
|
+
switches = '--disabled-password --gecos ""'
|
24
|
+
switches += " --shell=#{options[:shell]} " if options[:shell]
|
25
|
+
switches += ' --no-create-home ' if options[:nohome]
|
26
|
+
switches += " --ingroup #{options[:group]} " unless options[:group].nil?
|
27
|
+
invoke_command "grep '^#{user}:' /etc/passwd || sudo /usr/sbin/adduser #{user} #{switches}",
|
28
|
+
:via => run_method
|
29
|
+
end
|
30
|
+
|
31
|
+
# role = :app
|
32
|
+
def with_role(role, &block)
|
33
|
+
original, ENV['HOSTS'] = ENV['HOSTS'], find_servers(:roles => role).map{|d| d.host}.join(",")
|
34
|
+
begin
|
35
|
+
yield
|
36
|
+
ensure
|
37
|
+
ENV['HOSTS'] = original
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# options = { :user => 'xxxxx', :password => 'xxxxx' }
|
42
|
+
def with_credentials(options={}, &block)
|
43
|
+
original_username, original_password = user, password
|
44
|
+
begin
|
45
|
+
set :user, options[:user] || original_username
|
46
|
+
set :password, options[:password] || original_password
|
47
|
+
yield
|
48
|
+
ensure
|
49
|
+
set :user, original_username
|
50
|
+
set :password, original_password
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
##
|
55
|
+
# Run a command and ask for input when input_query is seen.
|
56
|
+
# Sends the response back to the server.
|
57
|
+
#
|
58
|
+
# +input_query+ is a regular expression that defaults to /^Password/.
|
59
|
+
#
|
60
|
+
# Can be used where +run+ would otherwise be used.
|
61
|
+
#
|
62
|
+
# run_with_input 'ssh-keygen ...', /^Are you sure you want to overwrite\?/
|
63
|
+
|
64
|
+
def run_with_input(shell_command, input_query=/^Password/, response=nil)
|
65
|
+
handle_command_with_input(:run, shell_command, input_query, response)
|
66
|
+
end
|
67
|
+
|
68
|
+
##
|
69
|
+
# Run a command using sudo and ask for input when a regular expression is seen.
|
70
|
+
# Sends the response back to the server.
|
71
|
+
#
|
72
|
+
# See also +run_with_input+
|
73
|
+
#
|
74
|
+
# +input_query+ is a regular expression
|
75
|
+
|
76
|
+
def sudo_with_input(shell_command, input_query=/^Password/, response=nil)
|
77
|
+
handle_command_with_input(:sudo, shell_command, input_query, response)
|
78
|
+
end
|
79
|
+
|
80
|
+
def invoke_with_input(shell_command, input_query=/^Password/, response=nil)
|
81
|
+
handle_command_with_input(run_method, shell_command, input_query, response)
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
##
|
87
|
+
# Does the actual capturing of the input and streaming of the output.
|
88
|
+
#
|
89
|
+
# local_run_method: run or sudo
|
90
|
+
# shell_command: The command to run
|
91
|
+
# input_query: A regular expression matching a request for input: /^Please enter your password/
|
92
|
+
|
93
|
+
def handle_command_with_input(local_run_method, shell_command, input_query, response=nil)
|
94
|
+
send(local_run_method, shell_command, {:pty => true}) do |channel, stream, data|
|
95
|
+
|
96
|
+
if data =~ input_query
|
97
|
+
if response
|
98
|
+
logger.info "#{data} #{"*"*(rand(10)+5)}", channel[:host]
|
99
|
+
channel.send_data "#{response}\n"
|
100
|
+
else
|
101
|
+
logger.info data, channel[:host]
|
102
|
+
response = ::Capistrano::CLI.password_prompt "#{data}"
|
103
|
+
channel.send_data "#{response}\n"
|
104
|
+
end
|
105
|
+
else
|
106
|
+
logger.info data, channel[:host]
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
Capistrano.plugin :utilities, Utilities
|
@@ -0,0 +1 @@
|
|
1
|
+
Dir[File.join(File.dirname(__FILE__), 'whenever/*.rb')].sort.each { |lib| require lib }
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'cap_recipes/tasks/utilities.rb'
|
2
|
+
|
3
|
+
Capistrano::Configuration.instance(true).load do
|
4
|
+
namespace :whenever do
|
5
|
+
desc "Update the crontab file"
|
6
|
+
task :update_crontab, :roles => :db do
|
7
|
+
run "cd #{release_path} && whenever --update-crontab #{application}"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
data/spec/cap/helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path("spec_helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
describe 'loading everything' do
|
4
|
+
def run_cap(folder,task)
|
5
|
+
folder = File.join(File.dirname(__FILE__),'cap',folder)
|
6
|
+
`cd #{folder} && #{task}`
|
7
|
+
end
|
8
|
+
|
9
|
+
it "finds all tasks" do
|
10
|
+
tasks = run_cap 'all', 'cap -T'
|
11
|
+
tasks.split("\n").size.should >= 20
|
12
|
+
end
|
13
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# ---- requirements
|
2
|
+
require 'rubygems'
|
3
|
+
require 'spec'
|
4
|
+
|
5
|
+
$LOAD_PATH << File.expand_path("../lib", File.dirname(__FILE__))
|
6
|
+
|
7
|
+
# ---- bugfix
|
8
|
+
#`exit?': undefined method `run?' for Test::Unit:Module (NoMethodError)
|
9
|
+
#can be solved with require test/unit but this will result in extra test-output
|
10
|
+
module Test
|
11
|
+
module Unit
|
12
|
+
def self.run?
|
13
|
+
true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cap-recipes
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.18
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nathan Esquenazi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-06-15 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Battle-tested capistrano recipes for debian, passenger, apache, delayed_job, juggernaut, rubygems, backgroundrb, rails and more
|
17
|
+
email: nesquena@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- LICENSE
|
24
|
+
- README.textile
|
25
|
+
files:
|
26
|
+
- .gitignore
|
27
|
+
- LICENSE
|
28
|
+
- README.textile
|
29
|
+
- Rakefile
|
30
|
+
- VERSION.yml
|
31
|
+
- cap-recipes.gemspec
|
32
|
+
- examples/advanced/deploy.rb
|
33
|
+
- examples/advanced/deploy/experimental.rb
|
34
|
+
- examples/advanced/deploy/production.rb
|
35
|
+
- examples/simple/deploy.rb
|
36
|
+
- lib/cap_recipes.rb
|
37
|
+
- lib/cap_recipes/tasks/apache.rb
|
38
|
+
- lib/cap_recipes/tasks/apache/install.rb
|
39
|
+
- lib/cap_recipes/tasks/apache/manage.rb
|
40
|
+
- lib/cap_recipes/tasks/aptitude.rb
|
41
|
+
- lib/cap_recipes/tasks/aptitude/manage.rb
|
42
|
+
- lib/cap_recipes/tasks/backgroundrb.rb
|
43
|
+
- lib/cap_recipes/tasks/backgroundrb/hooks.rb
|
44
|
+
- lib/cap_recipes/tasks/backgroundrb/manage.rb
|
45
|
+
- lib/cap_recipes/tasks/delayed_job.rb
|
46
|
+
- lib/cap_recipes/tasks/delayed_job/hooks.rb
|
47
|
+
- lib/cap_recipes/tasks/delayed_job/manage.rb
|
48
|
+
- lib/cap_recipes/tasks/juggernaut.rb
|
49
|
+
- lib/cap_recipes/tasks/juggernaut/hooks.rb
|
50
|
+
- lib/cap_recipes/tasks/juggernaut/manage.rb
|
51
|
+
- lib/cap_recipes/tasks/memcache.rb
|
52
|
+
- lib/cap_recipes/tasks/memcache/hooks.rb
|
53
|
+
- lib/cap_recipes/tasks/memcache/install.rb
|
54
|
+
- lib/cap_recipes/tasks/memcache/manage.rb
|
55
|
+
- lib/cap_recipes/tasks/passenger.rb
|
56
|
+
- lib/cap_recipes/tasks/passenger/install.rb
|
57
|
+
- lib/cap_recipes/tasks/passenger/manage.rb
|
58
|
+
- lib/cap_recipes/tasks/rails.rb
|
59
|
+
- lib/cap_recipes/tasks/rails/hooks.rb
|
60
|
+
- lib/cap_recipes/tasks/rails/manage.rb
|
61
|
+
- lib/cap_recipes/tasks/rubygems.rb
|
62
|
+
- lib/cap_recipes/tasks/rubygems/manage.rb
|
63
|
+
- lib/cap_recipes/tasks/utilities.rb
|
64
|
+
- lib/cap_recipes/tasks/whenever.rb
|
65
|
+
- lib/cap_recipes/tasks/whenever/hooks.rb
|
66
|
+
- lib/cap_recipes/tasks/whenever/manage.rb
|
67
|
+
- spec/cap/all/Capfile
|
68
|
+
- spec/cap/helper.rb
|
69
|
+
- spec/cap_recipes_spec.rb
|
70
|
+
- spec/spec_helper.rb
|
71
|
+
has_rdoc: true
|
72
|
+
homepage: http://github.com/nesquena/cap-recipes
|
73
|
+
licenses: []
|
74
|
+
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options:
|
77
|
+
- --charset=UTF-8
|
78
|
+
require_paths:
|
79
|
+
- lib
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: "0"
|
85
|
+
version:
|
86
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: "0"
|
91
|
+
version:
|
92
|
+
requirements: []
|
93
|
+
|
94
|
+
rubyforge_project:
|
95
|
+
rubygems_version: 1.3.4
|
96
|
+
signing_key:
|
97
|
+
specification_version: 3
|
98
|
+
summary: Battle-tested capistrano recipes for passenger, delayed_job, and more
|
99
|
+
test_files:
|
100
|
+
- spec/cap/helper.rb
|
101
|
+
- spec/cap_recipes_spec.rb
|
102
|
+
- spec/spec_helper.rb
|
103
|
+
- examples/advanced/deploy/experimental.rb
|
104
|
+
- examples/advanced/deploy/production.rb
|
105
|
+
- examples/advanced/deploy.rb
|
106
|
+
- examples/simple/deploy.rb
|