engineyard-serverside 1.5.23.ruby19.14 → 1.5.23.ruby19.15

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.
@@ -192,6 +192,10 @@ module EY
192
192
  File.join(deploy_to, "releases")
193
193
  end
194
194
 
195
+ def failed_release_dir
196
+ File.join(deploy_to, "releases_failed")
197
+ end
198
+
195
199
  def release_path
196
200
  @release_path ||= File.join(release_dir, Time.now.utc.strftime("%Y%m%d%H%M%S"))
197
201
  end
@@ -213,9 +213,19 @@ WRAP
213
213
 
214
214
  # task
215
215
  def cleanup_old_releases
216
+ clean_release_directory(c.release_dir)
217
+ clean_release_directory(c.failed_release_dir)
218
+ end
219
+
220
+ # Remove all but the most-recent +count+ releases from the specified
221
+ # release directory.
222
+ # IMPORTANT: This expects the release directory naming convention to be
223
+ # something with a sensible lexical order. Violate that at your peril.
224
+ def clean_release_directory(dir, count = 3)
216
225
  @cleanup_failed = true
217
- info "~> Cleaning up old releases"
218
- sudo "ls #{c.release_dir} | head -n -3 | xargs -I{} rm -rf #{c.release_dir}/{}"
226
+ ordinal = count.succ.to_s
227
+ info "~> Cleaning release directory: #{dir}"
228
+ sudo "ls -r #{dir} | tail -n +#{ordinal} | xargs -I@ rm -rf #{dir}/@"
219
229
  @cleanup_failed = false
220
230
  end
221
231
 
@@ -389,7 +399,8 @@ Deploy again if your services configuration appears incomplete or out of date.
389
399
  def with_failed_release_cleanup
390
400
  yield
391
401
  rescue Exception
392
- sudo "rm -rf #{c.release_path}"
402
+ info "~> Release #{c.release_path} failed, saving release to #{c.failed_release_dir}."
403
+ sudo "mkdir -p #{c.failed_release_dir} && mv #{c.release_path} #{c.failed_release_dir}"
393
404
  raise
394
405
  end
395
406
 
@@ -20,10 +20,10 @@ module EY
20
20
  end
21
21
  end
22
22
 
23
- if RUBY_VERSION =~ /1\.8/
24
- require 'engineyard-serverside/futures/dataflow'
25
- else
23
+ if defined?(Fiber)
26
24
  require 'engineyard-serverside/futures/celluloid'
25
+ else
26
+ require 'engineyard-serverside/futures/dataflow'
27
27
  end
28
28
  end
29
29
  end
@@ -108,7 +108,8 @@ module EY
108
108
  end
109
109
 
110
110
  def install_gem(path)
111
- run("#{gem_command} install -q --no-ri --no-rdoc #{path}")
111
+ # resin + ruby 1.8.6 need sudo privileges to install gems
112
+ run("sudo #{gem_command} install -q --no-ri --no-rdoc #{path}")
112
113
  end
113
114
 
114
115
  def gem_command
@@ -1,5 +1,5 @@
1
1
  module EY
2
2
  module Serverside
3
- VERSION = '1.5.23.ruby19.14'
3
+ VERSION = '1.5.23.ruby19.15'
4
4
  end
5
5
  end
@@ -54,13 +54,14 @@ describe "the deploy-hook API" do
54
54
 
55
55
  context "capistrano-ish methods" do
56
56
  it "has them" do
57
- run_hook { respond_to?(:latest_release) }.should be_true
58
- run_hook { respond_to?(:previous_release) }.should be_true
59
- run_hook { respond_to?(:all_releases) }.should be_true
60
- run_hook { respond_to?(:current_path) }.should be_true
61
- run_hook { respond_to?(:shared_path) }.should be_true
62
- run_hook { respond_to?(:release_dir) }.should be_true
63
- run_hook { respond_to?(:release_path) }.should be_true
57
+ run_hook { respond_to?(:latest_release) }.should be_true
58
+ run_hook { respond_to?(:previous_release) }.should be_true
59
+ run_hook { respond_to?(:all_releases) }.should be_true
60
+ run_hook { respond_to?(:current_path) }.should be_true
61
+ run_hook { respond_to?(:shared_path) }.should be_true
62
+ run_hook { respond_to?(:release_dir) }.should be_true
63
+ run_hook { respond_to?(:failed_release_dir)}.should be_true
64
+ run_hook { respond_to?(:release_path) }.should be_true
64
65
  end
65
66
  end
66
67
 
@@ -77,6 +77,27 @@ EOF
77
77
  end
78
78
  end
79
79
 
80
+ context "and failing with errors" do
81
+ before(:all) do
82
+ begin
83
+ deploy_test_application(with_assets = false) do
84
+ deploy_dir = File.join(@config.shared_path, 'cached-copy', 'deploy')
85
+ FileUtils.mkdir_p(deploy_dir)
86
+ hook = File.join(deploy_dir, 'before_migrate.rb')
87
+ hook_contents = %Q[raise 'aaaaaaahhhhh']
88
+ File.open(hook, 'w') {|f| f.puts(hook_contents) }
89
+ File.chmod(0755, hook)
90
+ end
91
+ rescue EY::Serverside::RemoteFailure
92
+ end
93
+ end
94
+
95
+ it "retains the failed release" do
96
+ release_name = File.basename(@config.release_path)
97
+ File.directory?(File.join(@deploy_dir, 'releases_failed', release_name)).should be_true
98
+ end
99
+ end
100
+
80
101
  context "with existing precompilation in a deploy hook" do
81
102
  before(:all) do
82
103
  deploy_test_application do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineyard-serverside
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.23.ruby19.14
4
+ version: 1.5.23.ruby19.15
5
5
  prerelease: 7
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,30 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-10 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2012-01-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &2153140660 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - =
20
+ - !ruby/object:Gem::Version
21
+ version: 1.3.2
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2153140660
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &2153138160 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.9.2.2
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2153138160
14
36
  description:
15
37
  email: cloud@engineyard.com
16
38
  executables: