engineyard-serverside 1.6.4 → 1.6.5

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.
@@ -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