eycap 0.4.16
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.
- data/History.txt +169 -0
- data/Manifest.txt +29 -0
- data/README.txt +65 -0
- data/Rakefile +33 -0
- data/lib/capistrano/recipes/deploy/strategy/filtered_remote_cache.rb +57 -0
- data/lib/capistrano/recipes/deploy/strategy/unshared_remote_cache.rb +21 -0
- data/lib/eycap.rb +3 -0
- data/lib/eycap/lib/ey_logger.rb +125 -0
- data/lib/eycap/lib/ey_logger_hooks.rb +14 -0
- data/lib/eycap/recipes.rb +24 -0
- data/lib/eycap/recipes/apache.rb +10 -0
- data/lib/eycap/recipes/backgroundrb.rb +23 -0
- data/lib/eycap/recipes/bundler.rb +12 -0
- data/lib/eycap/recipes/database.rb +74 -0
- data/lib/eycap/recipes/deploy.rb +151 -0
- data/lib/eycap/recipes/ferret.rb +20 -0
- data/lib/eycap/recipes/juggernaut.rb +19 -0
- data/lib/eycap/recipes/memcached.rb +24 -0
- data/lib/eycap/recipes/mongrel.rb +56 -0
- data/lib/eycap/recipes/monit.rb +17 -0
- data/lib/eycap/recipes/nginx.rb +43 -0
- data/lib/eycap/recipes/passenger.rb +10 -0
- data/lib/eycap/recipes/slice.rb +21 -0
- data/lib/eycap/recipes/solr.rb +37 -0
- data/lib/eycap/recipes/sphinx.rb +76 -0
- data/lib/eycap/recipes/templates/maintenance.rhtml +53 -0
- data/lib/eycap/recipes/tomcat.rb +16 -0
- data/test/test_eycap.rb +11 -0
- data/test/test_helper.rb +2 -0
- metadata +106 -0
data/History.txt
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
== 0.4.16 / 2009-09-30
|
2
|
+
* apps ping weather app before and after each deploy
|
3
|
+
|
4
|
+
== 0.4.15 / 2009-09-02
|
5
|
+
* added include in gemspec for bundler file
|
6
|
+
|
7
|
+
== 0.4.14 / 2009-08-31
|
8
|
+
* restored functionality to remove temporary compressed sql file after db:clone_prod_to_staging
|
9
|
+
* renamed gz extension files to bz2 in db:clone_to_local
|
10
|
+
* memcached: fix netcat not hanging up on a flush
|
11
|
+
|
12
|
+
== 0.4.13 / 2009-07-30
|
13
|
+
* changed Gemfile to absolute path
|
14
|
+
* merged changes from square/master for unshared_remote_cache cached deploy strategy
|
15
|
+
|
16
|
+
== 0.4.12 / 2009-06-26
|
17
|
+
* removed condition for dbhost that was useless and tested db:clone_prod_to_staging
|
18
|
+
|
19
|
+
== 0.4.11 / 2009-06-25
|
20
|
+
* changed nginx start and restart to give output to cap
|
21
|
+
* fixed db:clone_to_local task
|
22
|
+
|
23
|
+
== 0.4.10 / 2009-06-24
|
24
|
+
* using nohup on nginx start and restart
|
25
|
+
|
26
|
+
== 0.4.9 / 2009-06-22
|
27
|
+
* added nginx reload, upgrade and configtest - thanks Randy (ydnar)
|
28
|
+
|
29
|
+
== 0.4.8 / there is no 0.4.8, just like there is no spoon.
|
30
|
+
|
31
|
+
== 0.4.7 / 2009-05-12
|
32
|
+
* fixed bug in clone_prod_to_staging and clone_to_local db tasks for postgres
|
33
|
+
where the regex matching the password prompt for the restore was wrong
|
34
|
+
|
35
|
+
== 0.4.6 / 2009-03-24
|
36
|
+
* fixed bug to restore clone_prod_to_staging using the compressed file
|
37
|
+
|
38
|
+
== 0.4.5 / 2009-03-03
|
39
|
+
* happy square root day!
|
40
|
+
* added the staging restore to db:clone_prod_to_staging
|
41
|
+
|
42
|
+
== 0.4.4 / 2009-03-03
|
43
|
+
* happy square root day!
|
44
|
+
* fixed the *correct* database.rb file for the db:clone_prod_to_staging
|
45
|
+
|
46
|
+
== 0.4.3 / 2009-02-11
|
47
|
+
* updated db:dump command for Engine Yard Solo offering, fixing a bug where
|
48
|
+
the dbname wasn't included.
|
49
|
+
|
50
|
+
== 0.4.2 / 2009-02-11
|
51
|
+
* added condition to determine if the db:dump command is run against our
|
52
|
+
traditional offering or the new cloud offering
|
53
|
+
* fixed bug where if a production db host name doesn't have a -master at the
|
54
|
+
end it won't run the db:clone_prod_to_staging correctly
|
55
|
+
|
56
|
+
== 0.4.1 / 2009-01-09
|
57
|
+
* fixed bug for passenger:restart
|
58
|
+
|
59
|
+
== 0.4.0 / 2009-01-09
|
60
|
+
* add passenger:restart task
|
61
|
+
* add apache stop, start, restart and reload tasks
|
62
|
+
* Don't display database passwords in the logs, output, etc. use stdin instead
|
63
|
+
|
64
|
+
== 0.3.11 / 2008-11-09
|
65
|
+
* filtered_remote_cache uses svn switch
|
66
|
+
|
67
|
+
== 0.3.9 / 2008-09-29
|
68
|
+
* add reindex task for /engineyard/bin/acts_as_sphinx_searchd
|
69
|
+
* add reindex and configure task for /engineyard/bin/ultrasphinx_searchd
|
70
|
+
* add reindex and configure task for /engineyard/bin/thinking_sphinx_searchd
|
71
|
+
|
72
|
+
== 0.3.8 / 2008-09-22
|
73
|
+
* add PostgreSQL support to the database.rb recipe.
|
74
|
+
|
75
|
+
== 0.3.7 / 2008-08-23
|
76
|
+
* fix from customer for filtered_remote_cache to just use plain grep.
|
77
|
+
|
78
|
+
== 0.3.6 / 2008-07-17
|
79
|
+
* features updated VERSION
|
80
|
+
|
81
|
+
== 0.3.5 / 2008-07-17
|
82
|
+
* filtered_remote_cache uses cached checkout's repository root for comparison for speedier tagged/branched deploys
|
83
|
+
|
84
|
+
== 0.3.4 / 2008-06-17
|
85
|
+
* rake install_gem_no_doc for faster install
|
86
|
+
* set role to db for backup_name task
|
87
|
+
* add migration support for merb
|
88
|
+
|
89
|
+
== 0.3.3 / 2008-05-07
|
90
|
+
* add ey_logger to log deploys to server
|
91
|
+
|
92
|
+
== 0.3.2 / 2008-04-29
|
93
|
+
* adding db:clone_to_local task to take a dump on the slice, fetch it, and load it into your dev db on your workstation
|
94
|
+
* only clone from replica database
|
95
|
+
* remove call to variable in task desc
|
96
|
+
* fix ferret symlinking
|
97
|
+
* gemspec for github
|
98
|
+
|
99
|
+
== 0.3.1 / 2008-03-17
|
100
|
+
* Make the custom maintenance pages actually work!
|
101
|
+
|
102
|
+
== 0.3.0 / 2008-03-05
|
103
|
+
* Adding custom maintenance pages is now as easy as copying a custom html file to #{shared_path}/system/maintenance.html.custom
|
104
|
+
|
105
|
+
== 0.2.10 / 2008-03-02
|
106
|
+
* Symlink memcached.yml only on :memcached => true, except :no_release => true
|
107
|
+
|
108
|
+
== 0.2.9 / 2008-02-27
|
109
|
+
* Fix a bug with ultrasphinx:configure running on multiple hosts
|
110
|
+
|
111
|
+
== 0.2.8 / 2008-02-20
|
112
|
+
* Add tasks for solr starting,stopping, and log tailing.
|
113
|
+
* Add monit namespace and make appservers php/merb compatible
|
114
|
+
* Make ultrasphinx symlinking a little smarter
|
115
|
+
* Add tomcat tasks for spongecell
|
116
|
+
|
117
|
+
== 0.2.6 / 2008-02-14
|
118
|
+
* Make mongrel restarts only apply to mongrel slices
|
119
|
+
|
120
|
+
== 0.2.5 / 2008-02-11
|
121
|
+
* Added db cloning task
|
122
|
+
|
123
|
+
== 0.2.4 / 2008-02-06
|
124
|
+
* Symlink memcached.yml in on deploy if you enable the callback
|
125
|
+
|
126
|
+
== 0.2.3 / 2008-02-01
|
127
|
+
* Make log tailing environmentally aware. Also add tasks to tail mongrel logs
|
128
|
+
|
129
|
+
== 0.2.2 / 2008-01-25
|
130
|
+
* sphinx:configure ultrasphinx configuration task
|
131
|
+
|
132
|
+
== 0.2.1 / 2008-01-25
|
133
|
+
* override default deploy recipe start/stop tasks
|
134
|
+
|
135
|
+
== 0.2.0 / 2008-01-23
|
136
|
+
* sphinx:symlink ultrasphinx configuration directory
|
137
|
+
|
138
|
+
== 0.1.9 / 2008-01-21
|
139
|
+
* Correct memcached tasks.
|
140
|
+
|
141
|
+
== 0.1.8 / 2008-01-20
|
142
|
+
* Add memcached tasks
|
143
|
+
|
144
|
+
== 0.1.7 / 2008-01-19
|
145
|
+
* fix symlink_configs task
|
146
|
+
|
147
|
+
== 0.1.6 / 2008-01-19
|
148
|
+
* add restart tasks for backgroundrb
|
149
|
+
|
150
|
+
== 0.1.5 / 2008-01-18
|
151
|
+
* fixed bug in filtered_remote_cache that prevented a changed checkout URL from taking over the cache
|
152
|
+
|
153
|
+
== 0.1.4 / 2008-01-17
|
154
|
+
* added sphinx:[reindex|start|stop|restart] matches only app servers with :sphinx => true
|
155
|
+
|
156
|
+
== 0.1.3 / 2008-01-17
|
157
|
+
* filtered_remote_cache to removes the cached copy of the source URL changed
|
158
|
+
|
159
|
+
== 0.1.2 / 2008-01-15
|
160
|
+
* added filtered_remote_cache capistrano deployment strategy
|
161
|
+
|
162
|
+
== 0.1.1 / 2008-01-15
|
163
|
+
* removed database tasks until problem with 'defer' is solved
|
164
|
+
|
165
|
+
== 0.1.0 / 2008-01-14
|
166
|
+
* Bugfix for empty :application variable
|
167
|
+
|
168
|
+
== 0.0.1 / 2008-01-14
|
169
|
+
* Initial release
|
data/Manifest.txt
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
History.txt
|
2
|
+
Manifest.txt
|
3
|
+
README.txt
|
4
|
+
Rakefile
|
5
|
+
lib/capistrano/recipes/deploy/strategy/filtered_remote_cache.rb
|
6
|
+
lib/capistrano/recipes/deploy/strategy/unshared_remote_cache.rb
|
7
|
+
lib/eycap.rb
|
8
|
+
lib/eycap/lib/ey_logger.rb
|
9
|
+
lib/eycap/lib/ey_logger_hooks.rb
|
10
|
+
lib/eycap/recipes.rb
|
11
|
+
lib/eycap/recipes/backgroundrb.rb
|
12
|
+
lib/eycap/recipes/database.rb
|
13
|
+
lib/eycap/recipes/bundler.rb
|
14
|
+
lib/eycap/recipes/deploy.rb
|
15
|
+
lib/eycap/recipes/ferret.rb
|
16
|
+
lib/eycap/recipes/juggernaut.rb
|
17
|
+
lib/eycap/recipes/memcached.rb
|
18
|
+
lib/eycap/recipes/mongrel.rb
|
19
|
+
lib/eycap/recipes/monit.rb
|
20
|
+
lib/eycap/recipes/nginx.rb
|
21
|
+
lib/eycap/recipes/slice.rb
|
22
|
+
lib/eycap/recipes/solr.rb
|
23
|
+
lib/eycap/recipes/sphinx.rb
|
24
|
+
lib/eycap/recipes/templates/maintenance.rhtml
|
25
|
+
lib/eycap/recipes/tomcat.rb
|
26
|
+
lib/eycap/recipes/passenger.rb
|
27
|
+
lib/eycap/recipes/apache.rb
|
28
|
+
test/test_eycap.rb
|
29
|
+
test/test_helper.rb
|
data/README.txt
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
= eycap
|
2
|
+
|
3
|
+
== DESCRIPTION:
|
4
|
+
|
5
|
+
Engine Yard capistrano tasks for use specifically with Engine Yard slices. They include convenience methods for managed a database, mongrel, nginx or other services.
|
6
|
+
|
7
|
+
Also included is a deployment strategy, :filtered_remote_cache, which speeds up deployment like :remote_cache, but filters out .svn directory which are a security risk and write slowly to shared disks.
|
8
|
+
|
9
|
+
== REQUIREMENTS:
|
10
|
+
|
11
|
+
* capistrano (http://capify.org) > 2.0.0, but recommended with > 2.2.0
|
12
|
+
|
13
|
+
* NOTE: If you're using a git repository we recommend capistrano 2.5.3 and greater.
|
14
|
+
|
15
|
+
== INSTALL:
|
16
|
+
|
17
|
+
$ gem sources -a http://gems.github.com/ (you only need to do this once)
|
18
|
+
$ gem install engineyard-eycap
|
19
|
+
|
20
|
+
== SOURCE:
|
21
|
+
|
22
|
+
eycap's git repo is available on GitHub, which can be browsed at:
|
23
|
+
|
24
|
+
http://github.com/engineyard/eycap
|
25
|
+
|
26
|
+
and cloned from:
|
27
|
+
|
28
|
+
git://github.com/engineyard/eycap.git
|
29
|
+
|
30
|
+
== USAGE:
|
31
|
+
|
32
|
+
= Include in capistrano
|
33
|
+
|
34
|
+
In your deploy.rb, simply include this line at the top:
|
35
|
+
|
36
|
+
require 'eycap/recipes'
|
37
|
+
|
38
|
+
= Filtered remote cache
|
39
|
+
|
40
|
+
To use filtered_remote_cache, simply:
|
41
|
+
|
42
|
+
set :deploy_via, :filtered_remote_cache
|
43
|
+
|
44
|
+
== LICENSE:
|
45
|
+
|
46
|
+
Copyright (c) 2008 Engine Yard
|
47
|
+
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
49
|
+
a copy of this software and associated documentation files (the
|
50
|
+
"Software"), to deal in the Software without restriction, including
|
51
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
52
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
53
|
+
permit persons to whom the Software is furnished to do so, subject to
|
54
|
+
the following conditions:
|
55
|
+
|
56
|
+
The above copyright notice and this permission notice shall be
|
57
|
+
included in all copies or substantial portions of the Software.
|
58
|
+
|
59
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
60
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
61
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
62
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
63
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
64
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
65
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'hoe'
|
3
|
+
require './lib/eycap'
|
4
|
+
|
5
|
+
Hoe.new('eycap', Eycap::VERSION) do |p|
|
6
|
+
p.author = 'Engine Yard'
|
7
|
+
p.email = 'tech@engineyard.com'
|
8
|
+
p.summary = 'Capistrano tasks for Engine Yard slices'
|
9
|
+
p.description = 'A bunch of useful recipes to help deployment to Engine Yard slices'
|
10
|
+
p.url = 'http://github.com/engineyard/eycap/tree/master'
|
11
|
+
p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
|
12
|
+
p.extra_deps << ['capistrano', '>= 2.2.0']
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Open an irb session preloaded with this library"
|
16
|
+
task :console do
|
17
|
+
sh "irb -rubygems -r ./lib/eycap.rb"
|
18
|
+
end
|
19
|
+
|
20
|
+
task :coverage do
|
21
|
+
system("rm -fr coverage")
|
22
|
+
system("rcov test/test_*.rb")
|
23
|
+
system("open coverage/index.html")
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Upload site to Rubyforge"
|
27
|
+
task :site do
|
28
|
+
end
|
29
|
+
|
30
|
+
desc 'Install the package as a gem.'
|
31
|
+
task :install_gem_no_doc => [:clean, :package] do
|
32
|
+
sh "#{'sudo ' unless Hoe::WINDOZE}gem install --local --no-rdoc --no-ri pkg/*.gem"
|
33
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'capistrano/recipes/deploy/scm/base'
|
2
|
+
require 'capistrano/recipes/deploy/strategy/remote'
|
3
|
+
|
4
|
+
module Capistrano
|
5
|
+
module Deploy
|
6
|
+
module SCM
|
7
|
+
class Subversion < Base
|
8
|
+
def switch(revision, checkout)
|
9
|
+
"cd #{checkout} && #{scm :switch, verbose, authentication, "-r#{revision}", repository}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module Strategy
|
15
|
+
|
16
|
+
# Implements the deployment strategy that keeps a cached checkout of
|
17
|
+
# the source code on each remote server. Each deploy simply updates the
|
18
|
+
# cached checkout, and then filters a copy through tar to remove unwanted .svn directories,
|
19
|
+
# finally leaving a pristeen, export-like copy at the destination.
|
20
|
+
class FilteredRemoteCache < Remote
|
21
|
+
# Executes the SCM command for this strategy and writes the REVISION
|
22
|
+
# mark file to each host.
|
23
|
+
def deploy!
|
24
|
+
update_repository_cache
|
25
|
+
tar_copy_repository_cache
|
26
|
+
end
|
27
|
+
|
28
|
+
def check!
|
29
|
+
super.check do |d|
|
30
|
+
d.remote.writable(shared_path)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def repository_cache
|
37
|
+
configuration[:repository_cache] || "/var/cache/engineyard/#{configuration[:application]}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def update_repository_cache
|
41
|
+
logger.trace "checking if the cached copy repository root matches this deploy, then updating it"
|
42
|
+
command = "if [ -d #{repository_cache} ] && ! echo '#{configuration[:repository]}' | grep -q `svn info #{repository_cache} | grep 'Repository Root' | awk '{print $3}'`; then " +
|
43
|
+
"rm -rf #{repository_cache} && #{source.checkout(revision, repository_cache)}; " +
|
44
|
+
"elif [ -d #{repository_cache} ]; then #{source.switch(revision, repository_cache)}; " +
|
45
|
+
"else #{source.checkout(revision, repository_cache)}; fi"
|
46
|
+
scm_run(command)
|
47
|
+
end
|
48
|
+
|
49
|
+
def tar_copy_repository_cache
|
50
|
+
logger.trace "copying and filtering .svn via tar from cached version to #{configuration[:release_path]}"
|
51
|
+
run "mkdir #{configuration[:release_path]} && tar c --exclude=#{configuration[:filter_spec] || ".svn"} -C #{repository_cache} . | tar xC #{configuration[:release_path]} && #{mark}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'capistrano/recipes/deploy/strategy/remote_cache'
|
2
|
+
|
3
|
+
module Capistrano
|
4
|
+
module Deploy
|
5
|
+
module Strategy
|
6
|
+
class UnsharedRemoteCache < RemoteCache
|
7
|
+
def check!
|
8
|
+
super.check do |d|
|
9
|
+
d.remote.writable(repository_cache)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def repository_cache
|
16
|
+
configuration[:repository_cache]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/eycap.rb
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'tmpdir'
|
2
|
+
require 'fileutils'
|
3
|
+
module Capistrano
|
4
|
+
|
5
|
+
class Logger
|
6
|
+
|
7
|
+
def ey_log(level, message, line_prefix = nil)
|
8
|
+
EYLogger.log(level, message, line_prefix) if EYLogger.setup?
|
9
|
+
log_without_ey_logging(level, message, line_prefix)
|
10
|
+
end
|
11
|
+
|
12
|
+
unless method_defined?(:log_without_ey_logging)
|
13
|
+
alias_method :log_without_ey_logging, :log
|
14
|
+
alias_method :log, :ey_log
|
15
|
+
end
|
16
|
+
|
17
|
+
def close
|
18
|
+
device.close if @needs_close
|
19
|
+
EYLogger.close if EYLogger.setup?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class EYLogger
|
24
|
+
|
25
|
+
# Sets up the EYLogger to beging capturing capistrano's logging. You should pass the capistrno configuration
|
26
|
+
# and the deploy type as a string. The deploy type is for reporting purposes only but must be included.
|
27
|
+
def self.setup(configuration, deploy_type, options = {})
|
28
|
+
@_configuration = configuration
|
29
|
+
@_deploy_type = deploy_type.gsub(/:/, "_")
|
30
|
+
@_log_path = options[:deploy_log_path] || Dir.tmpdir
|
31
|
+
@_log_path << "/" unless @_log_path =~ /\/$/
|
32
|
+
FileUtils.mkdir_p(@_log_path)
|
33
|
+
@_setup = true
|
34
|
+
@_success = true
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.log(level, message, line_prefix=nil)
|
38
|
+
return nil unless setup?
|
39
|
+
@release_name = @_configuration[:release_name] if @release_name.nil?
|
40
|
+
@_log_file_path = @_log_path + @release_name + ".log" unless @_log_file_path
|
41
|
+
@_deploy_log_file = File.open(@_log_file_path, "w") if @_deploy_log_file.nil?
|
42
|
+
|
43
|
+
indent = "%*s" % [Logger::MAX_LEVEL, "*" * (Logger::MAX_LEVEL - level)]
|
44
|
+
message.each do |line|
|
45
|
+
if line_prefix
|
46
|
+
@_deploy_log_file << "#{indent} [#{line_prefix}] #{line.strip}\n"
|
47
|
+
else
|
48
|
+
@_deploy_log_file << "#{indent} #{line.strip}\n"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.post_process
|
54
|
+
unless ::Interrupt === $!
|
55
|
+
puts "\n\nPlease wait while the log file is processed\n"
|
56
|
+
# Should dump the stack trace of an exception if there is one
|
57
|
+
error = $!
|
58
|
+
unless error.nil?
|
59
|
+
@_deploy_log_file << error.message << "\n"
|
60
|
+
@_deploy_log_file << error.backtrace.join("\n")
|
61
|
+
@_success = false
|
62
|
+
end
|
63
|
+
self.close
|
64
|
+
|
65
|
+
hooks = [:any]
|
66
|
+
hooks << self.successful? ? :success : :failure
|
67
|
+
puts "Executing Post Processing Hooks"
|
68
|
+
hooks.each do |h|
|
69
|
+
@_post_process_hooks[h].each do |key|
|
70
|
+
@_configuration.parent.find_and_execute_task(key)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
puts "Finished Post Processing Hooks"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Adds a post processing hook.
|
78
|
+
#
|
79
|
+
# Provide a task name to execute. These tasks are executed after capistrano has actually run its course.
|
80
|
+
#
|
81
|
+
# Takes a key to control when the hook is executed.'
|
82
|
+
# :any - always executed
|
83
|
+
# :success - only execute on success
|
84
|
+
# :failure - only execute on failure
|
85
|
+
#
|
86
|
+
# ==== Example
|
87
|
+
# Capistrano::EYLogger.post_process_hook( "ey_logger:upload_log_to_slice", :any)
|
88
|
+
#
|
89
|
+
def self.post_process_hook(task, key = :any)
|
90
|
+
@_post_process_hooks ||= Hash.new{|h,k| h[k] = []}
|
91
|
+
@_post_process_hooks[key] << task
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.setup?
|
95
|
+
!!@_setup
|
96
|
+
end
|
97
|
+
|
98
|
+
def self.deploy_type
|
99
|
+
@_deploy_type
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.successful?
|
103
|
+
!!@_success
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.failure?
|
107
|
+
!@_success
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.log_file_path
|
111
|
+
@_log_file_path
|
112
|
+
end
|
113
|
+
|
114
|
+
def self.remote_log_file_name
|
115
|
+
@_log_file_name ||= "#{@_configuration[:release_name]}-#{@_deploy_type}-#{self.successful? ? "SUCCESS" : "FAILURE"}.log"
|
116
|
+
end
|
117
|
+
|
118
|
+
def self.close
|
119
|
+
@_deploy_log_file.flush unless @_deploy_log_file.nil?
|
120
|
+
@_deploy_log_file.close unless @_deploy_log_file.nil?
|
121
|
+
@_setup = false
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
end
|