engineyard-serverside 1.2.1 → 1.2.2

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.
@@ -73,9 +73,12 @@ module EY
73
73
  end
74
74
 
75
75
  def user
76
- ENV['USER']
76
+ configuration['user'] || ENV['USER']
77
+ end
78
+
79
+ def group
80
+ configuration['group'] || user
77
81
  end
78
- alias :group :user
79
82
 
80
83
  def role
81
84
  node['instance_role']
@@ -106,6 +109,10 @@ module EY
106
109
  Dir.glob("#{release_dir}/*").sort
107
110
  end
108
111
 
112
+ def binstubs_path
113
+ release_path + '/ey_bundler_binstubs'
114
+ end
115
+
109
116
  def framework_envs
110
117
  "RAILS_ENV=#{environment} RACK_ENV=#{environment} MERB_ENV=#{environment}"
111
118
  end
@@ -62,8 +62,10 @@ module EY
62
62
 
63
63
  @maintenance_up = true
64
64
  roles :app_master, :app, :solo do
65
- visible_maint_page = File.join(c.shared_path, "system", "maintenance.html")
66
- run "cp '#{maintenance_file}' '#{visible_maint_page}'"
65
+ maint_page_dir = File.join(c.shared_path, "system")
66
+ visible_maint_page = File.join(maint_page_dir, "maintenance.html")
67
+ run Escape.shell_command(['mkdir', '-p', maint_page_dir])
68
+ run Escape.shell_command(['cp', maintenance_file, visible_maint_page])
67
69
  end
68
70
  end
69
71
 
@@ -126,7 +128,7 @@ module EY
126
128
  get_bundler_installer(lockfile)
127
129
  else
128
130
  warn_about_missing_lockfile
129
- BundleInstaller.new(default_09_bundler, "--without=development --without=test")
131
+ bundler_09_installer(default_09_bundler)
130
132
  end
131
133
 
132
134
  sudo "#{$0} _#{VERSION}_ install_bundler #{bundler_installer.version}"
@@ -167,7 +169,7 @@ module EY
167
169
  return unless c.migrate?
168
170
  @migrations_reached = true
169
171
  roles :app_master, :solo do
170
- cmd = "cd #{c.release_path} && #{c.framework_envs} #{c.migration_command}"
172
+ cmd = "cd #{c.release_path} && PATH=#{c.binstubs_path}:$PATH #{c.framework_envs} #{c.migration_command}"
171
173
  info "~> Migrating: #{cmd}"
172
174
  run(cmd)
173
175
  end
@@ -292,22 +294,26 @@ module EY
292
294
  parser = LockfileParser.new(File.read(lockfile))
293
295
  case parser.lockfile_version
294
296
  when :bundler09
295
- BundleInstaller.new(
296
- parser.bundler_version || default_09_bundler,
297
- "--without=development --without=test")
297
+ bundler_09_installer(parser.bundler_version || default_09_bundler)
298
298
  when :bundler10
299
- BundleInstaller.new(
300
- parser.bundler_version || default_10_bundler,
301
- "--deployment --path #{c.shared_path}/bundled_gems --without development test"
302
- )
299
+ bundler_10_installer(parser.bundler_version || default_10_bundler)
303
300
  else
304
301
  raise "Unknown lockfile version #{parser.lockfile_version}"
305
302
  end
306
303
  end
307
304
  public :get_bundler_installer
308
305
 
309
- def default_09_bundler() "0.9.26" end
310
- def default_10_bundler() "1.0.0.rc.6" end
306
+ def bundler_09_installer(version)
307
+ BundleInstaller.new(version, '--without=development --without=test')
308
+ end
309
+
310
+ def bundler_10_installer(version)
311
+ BundleInstaller.new(version,
312
+ "--deployment --path #{c.shared_path}/bundled_gems --binstubs #{c.binstubs_path} --without development test")
313
+ end
314
+
315
+ def default_09_bundler() "0.9.26" end
316
+ def default_10_bundler() "1.0.0" end
311
317
 
312
318
  end # DeployBase
313
319
 
@@ -35,7 +35,7 @@ module EY
35
35
  end
36
36
 
37
37
  unless dep_section.length > 0
38
- raise "Couldn't parse #{lockfile}; exiting"
38
+ raise "Couldn't parse #{@contents}; exiting"
39
39
  exit(1)
40
40
  end
41
41
 
@@ -56,7 +56,7 @@ module EY
56
56
  # MRI's truthiness check is an internal C thing that does not call
57
57
  # any methods... so Dataflow cannot proxy it & we must "x == true"
58
58
  # Rubinius, wherefore art thou!?
59
- results.all?{|x| x == true } || raise(EY::RemoteFailure)
59
+ results.all?{|x| x == true } || raise(EY::RemoteFailure.new(cmd))
60
60
  end
61
61
  end
62
62
  end
@@ -1,3 +1,3 @@
1
1
  module EY
2
- VERSION = '1.2.1'
2
+ VERSION = '1.2.2'
3
3
  end
@@ -0,0 +1,146 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ module EY::Strategies::IntegrationSpec
4
+ module Helpers
5
+
6
+ def update_repository_cache
7
+ cached_copy = File.join(c.shared_path, 'cached-copy')
8
+
9
+ FileUtils.mkdir_p(cached_copy)
10
+ Dir.chdir(cached_copy) do
11
+ `echo "this is my file; there are many like it, but this one is mine" > file`
12
+ File.open('Gemfile', 'w') do |f|
13
+ f.write <<-EOF
14
+ source :gemcutter
15
+
16
+ gem "bundler", "~> 1.0.0.rc.6"
17
+ gem "rake"
18
+ EOF
19
+ end
20
+
21
+ File.open("Gemfile.lock", "w") do |f|
22
+ f.write <<-EOF
23
+ GEM
24
+ remote: http://rubygems.org/
25
+ specs:
26
+ rake (0.8.7)
27
+
28
+ PLATFORMS
29
+ ruby
30
+
31
+ DEPENDENCIES
32
+ bundler (~> 1.0.0.rc.6)
33
+ rake
34
+ EOF
35
+ end
36
+ end
37
+ end
38
+
39
+ def create_revision_file_command
40
+ "echo 'revision, yo' > #{c.release_path}/REVISION"
41
+ end
42
+
43
+ def short_log_message(revision)
44
+ "FONDLED THE CODE"
45
+ end
46
+
47
+ end
48
+ end
49
+
50
+ describe "deploying an application" do
51
+ class FullTestDeploy < EY::Deploy
52
+ attr_reader :infos, :debugs, :commands
53
+
54
+ def initialize(*)
55
+ super
56
+ @infos = []
57
+ @debugs = []
58
+ @commands = []
59
+ end
60
+
61
+ # stfu
62
+ def info(msg)
63
+ @infos << msg
64
+ end
65
+
66
+ # no really, stfu
67
+ def debug(msg)
68
+ @debugs << msg
69
+ end
70
+
71
+ # passwordless sudo is neither guaranteed nor desired
72
+ def sudo(cmd)
73
+ run(cmd)
74
+ end
75
+
76
+ def run(cmd)
77
+ # $stderr.puts(cmd)
78
+ @commands << cmd
79
+ super
80
+ end
81
+
82
+ # we're probably running this spec under bundler, but a real
83
+ # deploy does not
84
+ def bundle
85
+ my_env = ENV.to_hash
86
+
87
+ ENV.delete("BUNDLE_GEMFILE")
88
+ ENV.delete("BUNDLE_BIN_PATH")
89
+
90
+ result = super
91
+
92
+ ENV.replace(my_env)
93
+ result
94
+ end
95
+
96
+ def get_bundler_installer(lockfile)
97
+ installer = super
98
+ installer.options << ' --quiet' # stfu already!
99
+ installer
100
+ end
101
+
102
+ end
103
+
104
+ before(:all) do
105
+ @deploy_dir = File.join(Dir.tmpdir, "serverside-deploy-#{Time.now.to_i}-#{$$}")
106
+
107
+ # set up EY::Server like we're on a solo
108
+ EY::Server.all = [{:hostname => 'dontcare', :role => 'solo'}]
109
+
110
+ # run a deploy
111
+ config = EY::Deploy::Configuration.new({
112
+ "strategy" => "IntegrationSpec",
113
+ "deploy_to" => @deploy_dir,
114
+ "group" => `id -gn`.strip,
115
+ "stack" => 'nginx_passenger',
116
+ "migrate" => "ruby -e 'puts ENV[\"PATH\"]' > #{@deploy_dir}/path-when-migrating"
117
+ })
118
+
119
+ $0 = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
120
+ @deployer = FullTestDeploy.new(config)
121
+ @deployer.deploy
122
+ end
123
+
124
+ it "creates a REVISION file" do
125
+ File.exist?(File.join(@deploy_dir, 'current', 'REVISION')).should be_true
126
+ end
127
+
128
+ it "restarts the app servers" do
129
+ File.exist?(File.join(@deploy_dir, 'current', 'tmp', 'restart.txt')).should be_true
130
+ end
131
+
132
+ it "runs 'bundle install' with --deployment" do
133
+ bundle_install_cmd = @deployer.commands.grep(/bundle _\S+_ install/).first
134
+ bundle_install_cmd.should_not be_nil
135
+ bundle_install_cmd.should include('--deployment')
136
+ end
137
+
138
+ it "creates binstubs somewhere out of the way" do
139
+ File.exist?(File.join(@deploy_dir, 'current', 'ey_bundler_binstubs', 'rake')).should be_true
140
+ end
141
+
142
+ it "has the binstubs in the path when migrating" do
143
+ File.read(File.join(@deploy_dir, 'path-when-migrating')).should include('ey_bundler_binstubs')
144
+ end
145
+
146
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineyard-serverside
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 2
9
- - 1
10
- version: 1.2.1
9
+ - 2
10
+ version: 1.2.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - EY Cloud Team
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-25 00:00:00 -07:00
18
+ date: 2010-08-31 00:00:00 -07:00
19
19
  default_executable: engineyard-serverside
20
20
  dependencies: []
21
21
 
@@ -41,7 +41,6 @@ files:
41
41
  - lib/engineyard-serverside/strategies/git.rb
42
42
  - lib/engineyard-serverside/task.rb
43
43
  - lib/engineyard-serverside/version.rb
44
- - lib/engineyard-serverside/version_flymake.rb
45
44
  - lib/engineyard-serverside.rb
46
45
  - lib/vendor/dataflow/dataflow/actor.rb
47
46
  - lib/vendor/dataflow/dataflow/equality.rb
@@ -242,6 +241,7 @@ files:
242
241
  - spec/fixtures/valid_hook.rb
243
242
  - spec/git_strategy_spec.rb
244
243
  - spec/lockfile_parser_spec.rb
244
+ - spec/real_deploy_spec.rb
245
245
  - spec/spec_helper.rb
246
246
  - spec/support/lockfiles/0.9-no-bundler
247
247
  - spec/support/lockfiles/0.9-with-bundler
@@ -291,6 +291,7 @@ test_files:
291
291
  - spec/fixtures/valid_hook.rb
292
292
  - spec/git_strategy_spec.rb
293
293
  - spec/lockfile_parser_spec.rb
294
+ - spec/real_deploy_spec.rb
294
295
  - spec/spec_helper.rb
295
296
  - spec/support/lockfiles/0.9-no-bundler
296
297
  - spec/support/lockfiles/0.9-with-bundler
@@ -1,3 +0,0 @@
1
- module EY
2
- VERSION = '1.2.1'
3
- end