thunder_punch 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.mdown +8 -0
- data/README.mdown +4 -4
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/example/amazon.yml +10 -0
- data/lib/{critical_juncture/recipes.rb → recipes.rb} +0 -0
- data/lib/recipes/bundler.rb +10 -0
- data/lib/recipes/database.rb +72 -0
- data/lib/recipes/deployment.rb +3 -0
- data/lib/recipes/deployment/deployment.rb +60 -0
- data/lib/recipes/deployment/migration.rb +34 -0
- data/lib/recipes/deployment/passenger.rb +28 -0
- data/lib/recipes/deployment/symlinks.rb +39 -0
- data/lib/{critical_juncture/recipes → recipes}/ec2.rb +0 -0
- data/lib/{critical_juncture/recipes → recipes}/ec2/ami.rb +19 -19
- data/lib/recipes/jekyll/jekyll.rb +19 -0
- data/lib/recipes/less/less.rb +18 -0
- data/lib/recipes/thinking_sphinx.rb +52 -0
- data/lib/{critical_juncture/thunder_punch.rb → thunder_punch.rb} +0 -0
- data/lib/{critical_juncture/utilities → utilities}/utilities.rb +0 -0
- data/thunder_punch.gemspec +20 -10
- metadata +43 -20
- data/example/ec2_config.yml +0 -10
data/CHANGELOG.mdown
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 0.0.5 (June 28, 2010)
|
2
|
+
|
3
|
+
* Rename example config to amazon.yml [Bob Burbach - github.com/peregrinator]
|
4
|
+
* Change key names in config file [Bob Burbach - github.com/peregrinator]
|
5
|
+
* Remove name-spacing of lib under critical juncture [Bob Burbach - github.com/peregrinator]
|
6
|
+
* Add deployment recipes for a git-based deployment stategy [Bob Burbach - github.com/peregrinator]
|
7
|
+
* Add recipes for bundler and database tasks (fixing bundle and downloading db) [Bob Burbach - github.com/peregrinator]
|
8
|
+
|
1
9
|
== 0.0.4 (March 8, 2010)
|
2
10
|
|
3
11
|
* Add ability to exclude specific files and directories from ami bundling [Bob Burbach - github.com/peregrinator]
|
data/README.mdown
CHANGED
@@ -12,8 +12,8 @@ Because this collection of recipes is for Capistrano and run with the cap comman
|
|
12
12
|
|
13
13
|
* Capistrano >=2.5.5
|
14
14
|
* In your deploy.rb file:
|
15
|
-
* Add line 'require
|
16
|
-
* Add line 'set :ec2\_config\_location, File.join(File.dirname(__FILE__), "
|
15
|
+
* Add line 'require thunder_punch'
|
16
|
+
* Add line 'set :ec2\_config\_location, File.join(File.dirname(__FILE__), "amazon.yml")'
|
17
17
|
|
18
18
|
##Recipes
|
19
19
|
|
@@ -21,11 +21,11 @@ By creating a central and organized system for our tasks we can reduce the conte
|
|
21
21
|
|
22
22
|
###EC2
|
23
23
|
|
24
|
-
* Requires a yaml file named
|
24
|
+
* Requires a yaml file named amazon.yml with the appropriate passwords, etc. See the example file.
|
25
25
|
|
26
26
|
####ami.rb
|
27
27
|
* recipes for uploading necessary keys to server, bundling new AMI, uploading to S3, and registering a AMI
|
28
|
-
* exclude files and directories from bundling by putting them in an array in
|
28
|
+
* exclude files and directories from bundling by putting them in an array in amazon.yml
|
29
29
|
* `ami_excluded_items: ['/home/my_user', '/var/some_secret_stuff']`
|
30
30
|
|
31
31
|
##Known Issues
|
data/Rakefile
CHANGED
@@ -8,7 +8,7 @@ begin
|
|
8
8
|
gem.summary = "Collection of capistano recipes for deployment and server tasks"
|
9
9
|
gem.description = "Collection of capistano recipes for deployment and server tasks"
|
10
10
|
gem.email = "govpulse@gmail.com"
|
11
|
-
gem.homepage = "http://github.com/
|
11
|
+
gem.homepage = "http://github.com/trifecta/thunder_punch"
|
12
12
|
gem.authors = ["Bob Burbach"]
|
13
13
|
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
14
14
|
gem.add_dependency('capistrano', '>= 2.5.5')
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
data/example/amazon.yml
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#examples from Amazon documentation
|
2
|
+
aws_key_location: ~/.ssh #or whereever you store you aws keys - no trailing slash
|
3
|
+
ec2_private_key: pk-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem
|
4
|
+
ec2_x509_cert: cert-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem
|
5
|
+
aws_account_id: 495219933132
|
6
|
+
ec2_architecture: i386 #or x86_64
|
7
|
+
access_key_id: <aws-access-key-id>
|
8
|
+
secret_access_key: <aws-secret-access-key>
|
9
|
+
ec2_s3_bucket_name: some_bucket_for_your_ami_images
|
10
|
+
ami_excluded_items: [] #you may want to exclude files or directories like /home/my_user, etc.
|
File without changes
|
@@ -0,0 +1,72 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
#############################################################
|
3
|
+
# Check for Existing Database
|
4
|
+
#############################################################
|
5
|
+
|
6
|
+
namespace :database do
|
7
|
+
desc "Check to see if database exists"
|
8
|
+
task :check_database_existence, :roles => [:database], :only => { :primary => true } do
|
9
|
+
db_exists = false
|
10
|
+
run "mysql -u root -e \"SELECT COUNT(SCHEMA_NAME) FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '#{database_to_check}';\" --batch --reconnect --show-warning --silent" do |ch, stream, data|
|
11
|
+
if stream == :err
|
12
|
+
abort "capured output on STDERR when verifying database #{database_to_check} exists: #{data}"
|
13
|
+
elsif stream == :out
|
14
|
+
return_value = data.split("\n").first.chomp
|
15
|
+
|
16
|
+
if ['0','1'].include?(return_value)
|
17
|
+
db_exists = return_value == '0' ? false : true
|
18
|
+
else
|
19
|
+
abort "Invalid response from db when checking if database exists. Expected 0 or 1, got a count of #{return_value}"
|
20
|
+
end
|
21
|
+
puts db_exists
|
22
|
+
end
|
23
|
+
end
|
24
|
+
db_exists
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
#############################################################
|
29
|
+
# Backup Database
|
30
|
+
#############################################################
|
31
|
+
|
32
|
+
namespace :database do
|
33
|
+
desc "Dump the current database"
|
34
|
+
task :backup, :roles => [:database], :only => { :primary => true } do
|
35
|
+
set :database_to_check, remote_db_name # used by the check_database_existence task
|
36
|
+
db_exists = find_and_execute_task('database:check_database_existence')
|
37
|
+
|
38
|
+
if db_exists
|
39
|
+
sudo "sudo mkdir -p #{db_path}"
|
40
|
+
run "mysqldump -u root --opt #{remote_db_name} > #{sql_file_path}"
|
41
|
+
else
|
42
|
+
abort "There is no database named #{remote_db_name} to backup"
|
43
|
+
end
|
44
|
+
end #end task :backup
|
45
|
+
end #end namspace
|
46
|
+
|
47
|
+
#############################################################
|
48
|
+
# Load Remote Staging Database to Local Machine
|
49
|
+
#############################################################
|
50
|
+
|
51
|
+
namespace :database do
|
52
|
+
|
53
|
+
desc "Backup remote database and load locally"
|
54
|
+
task :load_remote, :roles => [:database], :only => { :primary => true } do
|
55
|
+
backup
|
56
|
+
copy
|
57
|
+
load_copy
|
58
|
+
end
|
59
|
+
|
60
|
+
desc "Copy the current database"
|
61
|
+
task :copy, :roles => [:database], :only => { :primary => true } do
|
62
|
+
`mkdir -p tmp`
|
63
|
+
download(sql_file_path, "tmp/", :via=> :scp)
|
64
|
+
end
|
65
|
+
|
66
|
+
desc "Load the staging database locally"
|
67
|
+
task :load_copy, :roles => [:database], :only => { :primary => true } do
|
68
|
+
`script/dbconsole -p < tmp/#{remote_db_name}.sql`
|
69
|
+
end
|
70
|
+
|
71
|
+
end #end namspace
|
72
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
namespace :deploy do
|
3
|
+
desc "Deploy the app"
|
4
|
+
task :default, :roles => [:app, :static, :worker] do
|
5
|
+
update
|
6
|
+
restart
|
7
|
+
cleanup
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Setup a GitHub-style deployment."
|
11
|
+
task :setup, :roles => [:app, :static, :worker], :except => { :no_release => true } do
|
12
|
+
run "git clone #{repository} #{current_path}"
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Update the deployed code."
|
16
|
+
task :update_code, :roles => [:app, :static, :worker], :except => { :no_release => true } do
|
17
|
+
run "cd #{current_path}; git fetch origin; git reset --hard #{branch}; git submodule update --init"
|
18
|
+
end
|
19
|
+
|
20
|
+
# "rollback" is actually a namespace with a default task
|
21
|
+
namespace :rollback do
|
22
|
+
desc "Rollback a single commit."
|
23
|
+
task :code, :roles => [:app, :static, :worker], :except => { :no_release => true } do
|
24
|
+
set :branch, "HEAD^"
|
25
|
+
deploy.default
|
26
|
+
end
|
27
|
+
|
28
|
+
task :default, :roles => [:app, :static, :worker] do
|
29
|
+
rollback.code
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
#############################################################
|
36
|
+
# Set Rake Path
|
37
|
+
#############################################################
|
38
|
+
|
39
|
+
namespace :deploy do
|
40
|
+
desc "Set rake path"
|
41
|
+
task :set_rake_path, :roles => [:app, :worker] do
|
42
|
+
run "which rake" do |ch, stream, data|
|
43
|
+
if stream == :err
|
44
|
+
abort "captured output on STDERR when setting rake path: #{data}"
|
45
|
+
elsif stream == :out
|
46
|
+
set :rake_path, data.to_s.strip
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
# Turn of capistrano's restart in favor of passenger restart
|
54
|
+
namespace :deploy do
|
55
|
+
desc "Remove deploy:restart In Favor Of passenger:restart Task"
|
56
|
+
task :restart do
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
namespace :deploy do
|
3
|
+
desc <<-DESC
|
4
|
+
Run the migrate rake task. By default, it runs this in most recently \
|
5
|
+
deployed version of the app. However, you can specify a different release \
|
6
|
+
via the migrate_target variable, which must be one of :latest (for the \
|
7
|
+
default behavior), or :current (for the release indicated by the \
|
8
|
+
`current' symlink). Strings will work for those values instead of symbols, \
|
9
|
+
too. You can also specify additional environment variables to pass to rake \
|
10
|
+
via the migrate_env variable. Finally, you can specify the full path to the \
|
11
|
+
rake executable by setting the rake variable. The defaults are:
|
12
|
+
|
13
|
+
set :rake, "rake"
|
14
|
+
set :rails_env, "production"
|
15
|
+
set :migrate_env, ""
|
16
|
+
set :migrate_target, :latest
|
17
|
+
DESC
|
18
|
+
task :migrate, :roles => :worker, :only => { :primary => true } do
|
19
|
+
rake = fetch(:rake, "rake")
|
20
|
+
rails_env = fetch(:rails_env, "production")
|
21
|
+
migrate_env = fetch(:migrate_env, "")
|
22
|
+
migrate_target = fetch(:migrate_target, :latest)
|
23
|
+
|
24
|
+
directory = case migrate_target.to_sym
|
25
|
+
when :current then current_path
|
26
|
+
when :latest then current_release
|
27
|
+
else raise ArgumentError, "unknown migration target #{migrate_target.inspect}"
|
28
|
+
end
|
29
|
+
|
30
|
+
run "cd #{directory}; #{rake} RAILS_ENV=#{rails_env} #{migrate_env} db:migrate"
|
31
|
+
end
|
32
|
+
end #namespace
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
#############################################################
|
3
|
+
# Passenger Restart
|
4
|
+
#############################################################
|
5
|
+
|
6
|
+
namespace :passenger do
|
7
|
+
desc "Restart Application"
|
8
|
+
task :restart, :roles => [:app] do
|
9
|
+
run "touch #{current_path}/tmp/restart.txt"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
#############################################################
|
14
|
+
# Passenger Status Checks
|
15
|
+
#############################################################
|
16
|
+
|
17
|
+
namespace :passenger do
|
18
|
+
desc "Check Passenger Status"
|
19
|
+
task :status, :roles => [:app] do
|
20
|
+
sudo 'passenger-status'
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "Check Apache/Passenger Memory Usage"
|
24
|
+
task :memory_stats, :roles => [:app] do
|
25
|
+
sudo 'passenger-memory-stats'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
# these are the usual suspects (for rails)
|
3
|
+
set :standard_symlinks, {
|
4
|
+
'log' => 'log',
|
5
|
+
'config/database.yml' => 'config/database.yml',
|
6
|
+
'public/system' => 'system',
|
7
|
+
'tmp' => 'tmp'
|
8
|
+
}
|
9
|
+
|
10
|
+
# these are project specific but still reside in shared
|
11
|
+
# e.g., 'backups' => 'db/backups'
|
12
|
+
# ==> rm -rf #{release_path}/backups && ln -s #{shared_path}/db/backups #{release_path}/backups
|
13
|
+
_cset :custom_symlinks, {}
|
14
|
+
|
15
|
+
# these are project specific but need full 'from' paths
|
16
|
+
# eg 'foo' => '/var/www/apps/project/foo'
|
17
|
+
# creates the command "rm -rf #{release_path}/foo && ln -s /var/www/apps/project/foo #{release_path}/foo"
|
18
|
+
_cset :other_symlinks, {}
|
19
|
+
|
20
|
+
namespace :symlinks do
|
21
|
+
desc "Create all sylinks (removes directories/files if they exist first)"
|
22
|
+
task :create, :roles => [:app, :static, :worker], :except => { :no_release => true } do
|
23
|
+
|
24
|
+
commands = standard_symlinks.map do |to, from|
|
25
|
+
"rm -rf #{current_path}/#{to} && ln -s #{shared_path}/#{from} #{current_path}/#{to}"
|
26
|
+
end
|
27
|
+
|
28
|
+
commands += custom_symlinks.map do |to, from|
|
29
|
+
"rm -rf #{current_path}/#{to} && ln -s #{shared_path}/#{from} #{current_path}/#{to}"
|
30
|
+
end
|
31
|
+
|
32
|
+
commands += other_symlinks.map do |to, from|
|
33
|
+
"rm -rf #{current_path}/#{to} && ln -s #{from} #{current_path}/#{to}"
|
34
|
+
end
|
35
|
+
|
36
|
+
run "cd #{current_path} && #{commands.join(" && ")}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
File without changes
|
@@ -6,28 +6,28 @@ Capistrano::Configuration.instance(:must_exist).load do |configuration|
|
|
6
6
|
|
7
7
|
task :load_ec2_config, :roles => :app do
|
8
8
|
alert_user('You need to set :ec2_config_location in your deploy file', :abort => true) unless ec2_config_location
|
9
|
-
alert_user("You must configure your ec2 settings in config/
|
9
|
+
alert_user("You must configure your ec2 settings in config/amazon.yml", :abort => true) unless File.exist?(ec2_config_location)
|
10
10
|
|
11
11
|
ec2_config = YAML.load( File.open(ec2_config_location, 'r') )
|
12
12
|
|
13
|
-
set :aws_key_location,
|
14
|
-
set :ec2_private_key,
|
15
|
-
set :ec2_x509_cert,
|
16
|
-
set :aws_account_id,
|
17
|
-
set :ec2_architecture,
|
18
|
-
set :
|
19
|
-
set :
|
20
|
-
set :ec2_s3_bucket_name,
|
21
|
-
set :ami_excluded_items,
|
13
|
+
set :aws_key_location, ec2_config['aws_key_location']
|
14
|
+
set :ec2_private_key, ec2_config['ec2_private_key']
|
15
|
+
set :ec2_x509_cert, ec2_config['ec2_x509_cert']
|
16
|
+
set :aws_account_id, ec2_config['aws_account_id']
|
17
|
+
set :ec2_architecture, ec2_config['ec2_architecture']
|
18
|
+
set :access_key_id, ec2_config['access_key_id']
|
19
|
+
set :secret_access_key, ec2_config['secret_access_key']
|
20
|
+
set :ec2_s3_bucket_name, ec2_config['ec2_s3_bucket_name']
|
21
|
+
set :ami_excluded_items, ec2_config['ami_excluded_items']
|
22
22
|
|
23
|
-
alert_user('You need to set :aws_key_location in config/
|
24
|
-
alert_user('You need to set :ec2_private_key in config/
|
25
|
-
alert_user('You need to set :ec2_x509_cert in config/
|
26
|
-
alert_user('You need to set :aws_account_id in config/
|
27
|
-
alert_user('You need to set :ec2_architecture to either "i386" or "x86_64" in config/
|
28
|
-
alert_user('You need to set :
|
29
|
-
alert_user('You need to set :
|
30
|
-
alert_user('You need to set :ec2_s3_bucket_name in config/
|
23
|
+
alert_user('You need to set :aws_key_location in config/amazon.yml', :abort => true) unless :key_location
|
24
|
+
alert_user('You need to set :ec2_private_key in config/amazon.yml', :abort => true) unless :ec2_private_key
|
25
|
+
alert_user('You need to set :ec2_x509_cert in config/amazon.yml', :abort => true) unless :ec2_x509_cert
|
26
|
+
alert_user('You need to set :aws_account_id in config/amazon.yml', :abort => true) unless :aws_account_id
|
27
|
+
alert_user('You need to set :ec2_architecture to either "i386" or "x86_64" in config/amazon.yml', :abort => true) unless :ec2_architecture
|
28
|
+
alert_user('You need to set :access_key_id in config/amazon.yml', :abort => true) unless :access_key_id
|
29
|
+
alert_user('You need to set :secret_access_key in config/amazon.yml', :abort => true) unless :secret_access_key
|
30
|
+
alert_user('You need to set :ec2_s3_bucket_name in config/amazon.yml', :abort => true) unless :ec2_s3_bucket_name
|
31
31
|
|
32
32
|
set :ec2_config_loaded, true
|
33
33
|
end
|
@@ -86,7 +86,7 @@ Capistrano::Configuration.instance(:must_exist).load do |configuration|
|
|
86
86
|
task :upload_ami_to_s3, :roles => :app do
|
87
87
|
load_ec2_config unless ec2_config_loaded
|
88
88
|
alert_user("You need to set :bundle_name via the command line\n `cap ec2:upload_to_s3 -s bundle_name=sample`", :abort => true) unless configuration[:bundle_name]
|
89
|
-
sudo "ec2-upload-bundle -b #{ec2_s3_bucket_name} -m /mnt/#{bundle_name}.manifest.xml -a #{
|
89
|
+
sudo "ec2-upload-bundle -b #{ec2_s3_bucket_name} -m /mnt/#{bundle_name}.manifest.xml -a #{access_key_id} -s #{secret_access_key}"
|
90
90
|
end
|
91
91
|
|
92
92
|
desc 'Register your bundled and upload (to S3) AMI'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do |configuration|
|
2
|
+
|
3
|
+
namespace :jekyll do
|
4
|
+
desc "Build static files from jekyll files"
|
5
|
+
task :build do
|
6
|
+
alert_user "Building static files from jekyll files"
|
7
|
+
run_locally "jekyll"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Create site (less and jekyll)"
|
11
|
+
task :create do
|
12
|
+
alert_user "[START] Creating site [START]"
|
13
|
+
find_and_execute_task('less:build')
|
14
|
+
find_and_execute_task('jekyll:build')
|
15
|
+
alert_user "[END] Creating site [END]"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do |configuration|
|
2
|
+
|
3
|
+
namespace :less do
|
4
|
+
desc "Build css files from .less files"
|
5
|
+
task :build do
|
6
|
+
_cset :less_directory, '_less'
|
7
|
+
_cset :css_directory, 'css'
|
8
|
+
Dir.glob(less_directory + '/*.less').each do |file|
|
9
|
+
if File.file?(file)
|
10
|
+
file_name = file.split('/').last.split('.').first
|
11
|
+
alert_user("Creating css file for less file named #{file_name}" )
|
12
|
+
run_locally("lessc #{less_directory}/#{file_name}.less #{css_directory}/#{file_name}.css")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
namespace :thinking_sphinx do
|
3
|
+
|
4
|
+
desc "Generate the Sphinx configuration file"
|
5
|
+
task :configure, :roles => [:app, :worker] do
|
6
|
+
rake "thinking_sphinx:configure"
|
7
|
+
end
|
8
|
+
|
9
|
+
desc "Index data"
|
10
|
+
task :index, :roles => :worker do
|
11
|
+
rake "thinking_sphinx:index"
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Start the Sphinx daemon"
|
15
|
+
task :start, :roles => :worker do
|
16
|
+
configure
|
17
|
+
rake "thinking_sphinx:start"
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Stop the Sphinx daemon"
|
21
|
+
task :stop, :roles => :worker do
|
22
|
+
configure
|
23
|
+
rake "thinking_sphinx:stop"
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Stop and then start the Sphinx daemon"
|
27
|
+
task :restart, :roles => :worker do
|
28
|
+
stop
|
29
|
+
start
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Stop, re-index and then start the Sphinx daemon"
|
33
|
+
task :rebuild, :roles => :worker do
|
34
|
+
stop
|
35
|
+
index
|
36
|
+
start
|
37
|
+
end
|
38
|
+
|
39
|
+
desc "Add the shared folder for sphinx files for the production environment"
|
40
|
+
task :shared_sphinx_folder, :roles => [:app, :worker] do
|
41
|
+
run "mkdir -p #{shared_path}/db/sphinx/production"
|
42
|
+
end
|
43
|
+
|
44
|
+
def rake(*tasks)
|
45
|
+
rails_env = fetch(:rails_env, "production")
|
46
|
+
rake = fetch(:rake, "rake")
|
47
|
+
tasks.each do |t|
|
48
|
+
run "if [ -d #{release_path} ]; then cd #{release_path}; else cd #{current_path}; fi; #{rake} RAILS_ENV=#{rails_env} #{t}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
File without changes
|
File without changes
|
data/thunder_punch.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{thunder_punch}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bob Burbach"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-07-02}
|
13
13
|
s.description = %q{Collection of capistano recipes for deployment and server tasks}
|
14
14
|
s.email = %q{govpulse@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -25,20 +25,30 @@ Gem::Specification.new do |s|
|
|
25
25
|
"Rakefile",
|
26
26
|
"TODO.mdown",
|
27
27
|
"VERSION",
|
28
|
-
"example/
|
29
|
-
"lib/
|
30
|
-
"lib/
|
31
|
-
"lib/
|
32
|
-
"lib/
|
33
|
-
"lib/
|
28
|
+
"example/amazon.yml",
|
29
|
+
"lib/recipes.rb",
|
30
|
+
"lib/recipes/bundler.rb",
|
31
|
+
"lib/recipes/database.rb",
|
32
|
+
"lib/recipes/deployment.rb",
|
33
|
+
"lib/recipes/deployment/deployment.rb",
|
34
|
+
"lib/recipes/deployment/migration.rb",
|
35
|
+
"lib/recipes/deployment/passenger.rb",
|
36
|
+
"lib/recipes/deployment/symlinks.rb",
|
37
|
+
"lib/recipes/ec2.rb",
|
38
|
+
"lib/recipes/ec2/ami.rb",
|
39
|
+
"lib/recipes/jekyll/jekyll.rb",
|
40
|
+
"lib/recipes/less/less.rb",
|
41
|
+
"lib/recipes/thinking_sphinx.rb",
|
42
|
+
"lib/thunder_punch.rb",
|
43
|
+
"lib/utilities/utilities.rb",
|
34
44
|
"test/helper.rb",
|
35
45
|
"test/test_thunder_punch.rb",
|
36
46
|
"thunder_punch.gemspec"
|
37
47
|
]
|
38
|
-
s.homepage = %q{http://github.com/
|
48
|
+
s.homepage = %q{http://github.com/trifecta/thunder_punch}
|
39
49
|
s.rdoc_options = ["--charset=UTF-8"]
|
40
50
|
s.require_paths = ["lib"]
|
41
|
-
s.rubygems_version = %q{1.3.
|
51
|
+
s.rubygems_version = %q{1.3.6}
|
42
52
|
s.summary = %q{Collection of capistano recipes for deployment and server tasks}
|
43
53
|
s.test_files = [
|
44
54
|
"test/helper.rb",
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thunder_punch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 5
|
9
|
+
version: 0.0.5
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Bob Burbach
|
@@ -9,29 +14,35 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-07-02 00:00:00 -07:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: thoughtbot-shoulda
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
23
29
|
version: "0"
|
24
|
-
|
30
|
+
type: :development
|
31
|
+
version_requirements: *id001
|
25
32
|
- !ruby/object:Gem::Dependency
|
26
33
|
name: capistrano
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - ">="
|
32
38
|
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 2
|
41
|
+
- 5
|
42
|
+
- 5
|
33
43
|
version: 2.5.5
|
34
|
-
|
44
|
+
type: :runtime
|
45
|
+
version_requirements: *id002
|
35
46
|
description: Collection of capistano recipes for deployment and server tasks
|
36
47
|
email: govpulse@gmail.com
|
37
48
|
executables: []
|
@@ -50,17 +61,27 @@ files:
|
|
50
61
|
- Rakefile
|
51
62
|
- TODO.mdown
|
52
63
|
- VERSION
|
53
|
-
- example/
|
54
|
-
- lib/
|
55
|
-
- lib/
|
56
|
-
- lib/
|
57
|
-
- lib/
|
58
|
-
- lib/
|
64
|
+
- example/amazon.yml
|
65
|
+
- lib/recipes.rb
|
66
|
+
- lib/recipes/bundler.rb
|
67
|
+
- lib/recipes/database.rb
|
68
|
+
- lib/recipes/deployment.rb
|
69
|
+
- lib/recipes/deployment/deployment.rb
|
70
|
+
- lib/recipes/deployment/migration.rb
|
71
|
+
- lib/recipes/deployment/passenger.rb
|
72
|
+
- lib/recipes/deployment/symlinks.rb
|
73
|
+
- lib/recipes/ec2.rb
|
74
|
+
- lib/recipes/ec2/ami.rb
|
75
|
+
- lib/recipes/jekyll/jekyll.rb
|
76
|
+
- lib/recipes/less/less.rb
|
77
|
+
- lib/recipes/thinking_sphinx.rb
|
78
|
+
- lib/thunder_punch.rb
|
79
|
+
- lib/utilities/utilities.rb
|
59
80
|
- test/helper.rb
|
60
81
|
- test/test_thunder_punch.rb
|
61
82
|
- thunder_punch.gemspec
|
62
83
|
has_rdoc: true
|
63
|
-
homepage: http://github.com/
|
84
|
+
homepage: http://github.com/trifecta/thunder_punch
|
64
85
|
licenses: []
|
65
86
|
|
66
87
|
post_install_message:
|
@@ -72,18 +93,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
72
93
|
requirements:
|
73
94
|
- - ">="
|
74
95
|
- !ruby/object:Gem::Version
|
96
|
+
segments:
|
97
|
+
- 0
|
75
98
|
version: "0"
|
76
|
-
version:
|
77
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
100
|
requirements:
|
79
101
|
- - ">="
|
80
102
|
- !ruby/object:Gem::Version
|
103
|
+
segments:
|
104
|
+
- 0
|
81
105
|
version: "0"
|
82
|
-
version:
|
83
106
|
requirements: []
|
84
107
|
|
85
108
|
rubyforge_project:
|
86
|
-
rubygems_version: 1.3.
|
109
|
+
rubygems_version: 1.3.6
|
87
110
|
signing_key:
|
88
111
|
specification_version: 3
|
89
112
|
summary: Collection of capistano recipes for deployment and server tasks
|
data/example/ec2_config.yml
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
#examples from Amazon documentation
|
2
|
-
aws_key_location: ~/.ssh #or whereever you store you aws keys - no trailing slash
|
3
|
-
ec2_private_key: pk-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem
|
4
|
-
ec2_x509_cert: cert-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem
|
5
|
-
aws_account_id: 495219933132
|
6
|
-
ec2_architecture: i386 #or x86_64
|
7
|
-
aws_access_key: <aws-access-key-id>
|
8
|
-
aws_secret_access_key: <aws-secret-access-key>
|
9
|
-
ec2_s3_bucket_name: some_bucket_for_your_ami_images
|
10
|
-
ami_excluded_items: [] #you may want to exclude files or directories like /home/my_user, etc.
|