engineyard-serverside 1.6.4 → 1.6.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -135,6 +135,9 @@ module EY
135
135
 
136
136
  config = EY::Serverside::Deploy::Configuration.new(integrate_options)
137
137
 
138
+ # We have to rsync the entire app dir, so we need all the permissions to be correct!
139
+ system "sudo sh -l -c 'find #{app_dir} -not -user #{config.user} -or -not -group #{config.group} -exec chown #{config.user}:#{config.group} {} +'"
140
+
138
141
  load_servers(config)
139
142
 
140
143
  invoke :propagate
@@ -128,8 +128,16 @@ module EY
128
128
  release_path + '/ey_bundler_binstubs'
129
129
  end
130
130
 
131
+ def framework_env_names
132
+ %w[RAILS_ENV RACK_ENV NODE_ENV MERB_ENV]
133
+ end
134
+
131
135
  def framework_envs
132
- "RAILS_ENV=#{environment} RACK_ENV=#{environment} NODE_ENV=#{environment} MERB_ENV=#{environment}"
136
+ framework_env_names.map { |e| "#{e}=#{environment}" }.join(' ')
137
+ end
138
+
139
+ def set_framework_envs
140
+ framework_env_names.each { |e| ENV[e] = environment }
133
141
  end
134
142
 
135
143
  def current_path
@@ -211,7 +211,7 @@ To fix this problem, commit your Gemfile.lock to your repository and redeploy.
211
211
  [[ -x #{path} ]] || cat > #{path} <<'SSH'
212
212
  #!/bin/sh
213
213
  unset SSH_AUTH_SOCK
214
- ssh -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PasswordAuthentication=no -o LogLevel=DEBUG -o IdentityFile=#{identity_file} -o IdentitiesOnly=yes $*
214
+ ssh -o CheckHostIP=no -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o LogLevel=INFO -o IdentityFile=#{identity_file} -o IdentitiesOnly=yes $*
215
215
  SSH
216
216
  chmod 0700 #{path}
217
217
  WRAP
@@ -32,6 +32,7 @@ module EY
32
32
  class CallbackContext
33
33
  def initialize(config)
34
34
  @configuration = config
35
+ @configuration.set_framework_envs
35
36
  @node = node
36
37
  end
37
38
 
@@ -87,8 +87,18 @@ module EY
87
87
  end
88
88
  end
89
89
 
90
+ # Make a known hosts tempfile to absorb host fingerprints so we don't show
91
+ #
92
+ # Warning: Permanently added 'xxx' (RSA) to the list of known hosts.
93
+ #
94
+ # for every ssh command.
95
+ # (even with StrictHostKeyChecking=no, the warning output is annoying)
96
+ def self.known_hosts_file
97
+ @known_hosts_file ||= Tempfile.new('ey-ss-known-hosts')
98
+ end
99
+
90
100
  def ssh_command
91
- "ssh -i #{ENV['HOME']}/.ssh/internal -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PasswordAuthentication=no"
101
+ "ssh -i #{ENV['HOME']}/.ssh/internal -o StrictHostKeyChecking=no -o UserKnownHostsFile=#{self.class.known_hosts_file.path} -o PasswordAuthentication=no "
92
102
  end
93
103
 
94
104
  end
@@ -1,5 +1,5 @@
1
1
  module EY
2
2
  module Serverside
3
- VERSION = '1.6.4'
3
+ VERSION = '1.6.5'
4
4
  end
5
5
  end
@@ -1,23 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "the deploy-hook API" do
4
- before(:each) do
5
- @hook = EY::Serverside::DeployHook.new(options)
6
- @callback_context = EY::Serverside::DeployHook::CallbackContext.new(@hook.config)
4
+ def deploy_hook(options={})
5
+ EY::Serverside::DeployHook.new(options)
7
6
  end
8
7
 
9
8
  def run_hook(options={}, &blk)
10
9
  raise ArgumentError unless block_given?
11
- options.each do |k, v|
12
- @callback_context.configuration[k] = v
13
- end
14
-
15
10
  # The hooks on the filesystem are run by passing a string to
16
11
  # context.instance_eval, not a block. However, using a block
17
12
  # should allow us to get the same degree of test coverage and
18
13
  # still let us have things like syntax checking work on this spec
19
14
  # file.
20
- @callback_context.instance_eval(&blk)
15
+ deploy_hook(options).callback_context.instance_eval(&blk)
21
16
  end
22
17
 
23
18
  context "#run" do
@@ -46,9 +41,9 @@ describe "the deploy-hook API" do
46
41
  end
47
42
 
48
43
  it "runs things with sudo" do
49
- @callback_context.should_receive(:system).with("sudo sh -l -c 'do it as root'").and_return(true)
50
-
51
- run_hook { sudo("do it as root") }
44
+ callback = deploy_hook.callback_context
45
+ callback.should_receive(:system).with("sudo sh -l -c 'do it as root'").and_return(true)
46
+ callback.instance_eval { sudo("do it as root") }
52
47
  end
53
48
  end
54
49
 
@@ -123,6 +118,15 @@ describe "the deploy-hook API" do
123
118
  end
124
119
  end
125
120
 
121
+ context "environment variables" do
122
+ it "sets the framework env variables" do
123
+ run_hook('framework_env' => 'production') { ENV['RAILS_ENV'] }.should == 'production'
124
+ run_hook('framework_env' => 'production') { ENV['RACK_ENV'] }.should == 'production'
125
+ run_hook('framework_env' => 'production') { ENV['MERB_ENV'] }.should == 'production'
126
+ run_hook('framework_env' => 'production') { ENV['NODE_ENV'] }.should == 'production'
127
+ end
128
+ end
129
+
126
130
  context "has methods to run code only on certain instances" do
127
131
  def scenarios
128
132
  [
@@ -141,10 +145,11 @@ describe "the deploy-hook API" do
141
145
 
142
146
  def where_code_runs_with(method, *args)
143
147
  scenarios.map do |s|
144
- @callback_context.configuration[:current_roles] = s[:instance_role].split(',')
145
- @callback_context.configuration[:current_name] = s[:name]
148
+ hook_result = run_hook('current_roles' => s[:instance_role].split(','), 'current_name' => s[:name]) do
149
+ send(method, *args) { 'ran!' }
150
+ end
146
151
 
147
- if run_hook { send(method, *args) { 'ran!'} } == 'ran!'
152
+ if hook_result == 'ran!'
148
153
  result = s[:instance_role]
149
154
  result << "_#{s[:name]}" if s[:name]
150
155
  result
@@ -189,14 +194,14 @@ describe "the deploy-hook API" do
189
194
  context "#syntax_error" do
190
195
  it "returns nil for hook files containing valid Ruby syntax" do
191
196
  hook_path = File.expand_path('../fixtures/valid_hook.rb', __FILE__)
192
- @hook.syntax_error(hook_path).should be_nil
197
+ deploy_hook.syntax_error(hook_path).should be_nil
193
198
  end
194
199
 
195
200
  it "returns a brief problem description for hook files containing valid Ruby syntax" do
196
201
  hook_path = File.expand_path('../fixtures/invalid_hook.rb', __FILE__)
197
202
  desc = "spec/fixtures/invalid_hook.rb:1: syntax error, unexpected '^'"
198
203
  match = /#{Regexp.escape desc}/
199
- @hook.syntax_error(hook_path).should =~ match
204
+ deploy_hook.syntax_error(hook_path).should =~ match
200
205
  end
201
206
  end
202
207
 
File without changes
File without changes
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.6.4
4
+ version: 1.6.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-26 00:00:00.000000000 Z
12
+ date: 2012-10-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -323,6 +323,8 @@ files:
323
323
  - spec/deploy_hook_spec.rb
324
324
  - spec/deprecation_spec.rb
325
325
  - spec/fixtures/gemfiles/1.0.21-rails-31-with-sqlite
326
+ - spec/fixtures/gitrepo/bar
327
+ - spec/fixtures/gitrepo/foo
326
328
  - spec/fixtures/gitrepo.tar.gz
327
329
  - spec/fixtures/invalid_hook.rb
328
330
  - spec/fixtures/lockfiles/0.9-no-bundler
@@ -365,7 +367,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
365
367
  version: '0'
366
368
  segments:
367
369
  - 0
368
- hash: -4080169497059985943
370
+ hash: -3529286902582306998
369
371
  required_rubygems_version: !ruby/object:Gem::Requirement
370
372
  none: false
371
373
  requirements:
@@ -374,7 +376,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
374
376
  version: 1.3.6
375
377
  requirements: []
376
378
  rubyforge_project:
377
- rubygems_version: 1.8.19
379
+ rubygems_version: 1.8.24
378
380
  signing_key:
379
381
  specification_version: 3
380
382
  summary: A gem that deploys ruby applications on EY Cloud instances
@@ -385,6 +387,8 @@ test_files:
385
387
  - spec/deploy_hook_spec.rb
386
388
  - spec/deprecation_spec.rb
387
389
  - spec/fixtures/gemfiles/1.0.21-rails-31-with-sqlite
390
+ - spec/fixtures/gitrepo/bar
391
+ - spec/fixtures/gitrepo/foo
388
392
  - spec/fixtures/gitrepo.tar.gz
389
393
  - spec/fixtures/invalid_hook.rb
390
394
  - spec/fixtures/lockfiles/0.9-no-bundler