engineyard-serverside 1.6.5 → 1.7.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. data/lib/engineyard-serverside.rb +2 -0
  2. data/lib/engineyard-serverside/cli.rb +83 -48
  3. data/lib/engineyard-serverside/configuration.rb +85 -18
  4. data/lib/engineyard-serverside/deploy.rb +105 -91
  5. data/lib/engineyard-serverside/deploy_hook.rb +22 -20
  6. data/lib/engineyard-serverside/deprecation.rb +9 -17
  7. data/lib/engineyard-serverside/future.rb +10 -4
  8. data/lib/engineyard-serverside/futures/celluloid.rb +3 -13
  9. data/lib/engineyard-serverside/futures/dataflow.rb +8 -13
  10. data/lib/engineyard-serverside/lockfile_parser.rb +1 -1
  11. data/lib/engineyard-serverside/rails_asset_support.rb +26 -10
  12. data/lib/engineyard-serverside/server.rb +17 -12
  13. data/lib/engineyard-serverside/shell.rb +98 -0
  14. data/lib/engineyard-serverside/shell/formatter.rb +71 -0
  15. data/lib/engineyard-serverside/shell/helpers.rb +29 -0
  16. data/lib/engineyard-serverside/strategies/git.rb +33 -63
  17. data/lib/engineyard-serverside/task.rb +34 -13
  18. data/lib/engineyard-serverside/version.rb +1 -1
  19. data/spec/basic_deploy_spec.rb +15 -50
  20. data/spec/bundler_deploy_spec.rb +3 -44
  21. data/spec/configuration_spec.rb +72 -0
  22. data/spec/custom_deploy_spec.rb +3 -4
  23. data/spec/deploy_hook_spec.rb +210 -162
  24. data/spec/deprecation_spec.rb +4 -26
  25. data/spec/ey_yml_customized_deploy_spec.rb +68 -0
  26. data/spec/fixtures/repos/assets_disabled/Gemfile +6 -0
  27. data/spec/fixtures/repos/assets_disabled/Gemfile.lock +90 -0
  28. data/spec/fixtures/repos/assets_disabled/README +1 -0
  29. data/spec/fixtures/repos/assets_disabled/Rakefile +5 -0
  30. data/spec/fixtures/repos/assets_disabled/config/application.rb +5 -0
  31. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile +6 -0
  32. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock +90 -0
  33. data/spec/fixtures/repos/assets_disabled_in_ey_yml/README +1 -0
  34. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile +5 -0
  35. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb +5 -0
  36. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml +4 -0
  37. data/spec/fixtures/repos/assets_enabled/Gemfile +6 -0
  38. data/spec/fixtures/repos/assets_enabled/Gemfile.lock +90 -0
  39. data/spec/fixtures/repos/assets_enabled/README +1 -0
  40. data/spec/fixtures/repos/assets_enabled/Rakefile +5 -0
  41. data/spec/fixtures/repos/assets_enabled/config/application.rb +5 -0
  42. data/spec/fixtures/repos/assets_enabled_in_ey_yml/README +1 -0
  43. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +5 -0
  44. data/spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml +4 -0
  45. data/spec/fixtures/repos/assets_in_hook/Gemfile +6 -0
  46. data/spec/fixtures/repos/assets_in_hook/Gemfile.lock +90 -0
  47. data/spec/fixtures/repos/assets_in_hook/README +2 -0
  48. data/spec/fixtures/repos/assets_in_hook/Rakefile +5 -0
  49. data/spec/fixtures/repos/assets_in_hook/config/application.rb +5 -0
  50. data/spec/fixtures/repos/assets_in_hook/deploy/before_migrate.rb +1 -0
  51. data/spec/fixtures/repos/default/Gemfile +5 -0
  52. data/spec/fixtures/repos/default/Gemfile.lock +14 -0
  53. data/spec/fixtures/repos/default/README +5 -0
  54. data/spec/fixtures/repos/ey_yml/Gemfile +4 -0
  55. data/spec/fixtures/repos/ey_yml/Gemfile.lock +12 -0
  56. data/spec/fixtures/repos/ey_yml/README +1 -0
  57. data/spec/fixtures/repos/ey_yml/config/ey.yml +12 -0
  58. data/spec/fixtures/repos/ey_yml/deploy/before_migrate.rb +6 -0
  59. data/spec/fixtures/repos/ey_yml_alt/Gemfile +4 -0
  60. data/spec/fixtures/repos/ey_yml_alt/Gemfile.lock +12 -0
  61. data/spec/fixtures/repos/ey_yml_alt/README +1 -0
  62. data/spec/fixtures/repos/ey_yml_alt/deploy/before_migrate.rb +6 -0
  63. data/spec/fixtures/repos/ey_yml_alt/ey.yml +12 -0
  64. data/spec/fixtures/repos/hook_fails/README +1 -0
  65. data/spec/fixtures/repos/hook_fails/deploy/before_migrate.rb +1 -0
  66. data/spec/fixtures/repos/hooks/README +1 -0
  67. data/spec/fixtures/repos/hooks/deploy/after_bundle.rb +1 -0
  68. data/spec/fixtures/repos/hooks/deploy/after_compile_assets.rb +1 -0
  69. data/spec/fixtures/repos/hooks/deploy/after_migrate.rb +1 -0
  70. data/spec/fixtures/repos/hooks/deploy/after_restart.rb +1 -0
  71. data/spec/fixtures/repos/hooks/deploy/after_symlink.rb +1 -0
  72. data/spec/fixtures/repos/hooks/deploy/before_bundle.rb +1 -0
  73. data/spec/fixtures/repos/hooks/deploy/before_compile_assets.rb +1 -0
  74. data/spec/fixtures/repos/hooks/deploy/before_migrate.rb +1 -0
  75. data/spec/fixtures/repos/hooks/deploy/before_restart.rb +1 -0
  76. data/spec/fixtures/repos/hooks/deploy/before_symlink.rb +1 -0
  77. data/spec/fixtures/repos/no_ey_config/Gemfile +4 -0
  78. data/spec/fixtures/repos/no_ey_config/Gemfile.lock +12 -0
  79. data/spec/fixtures/repos/no_ey_config/README +1 -0
  80. data/spec/fixtures/repos/no_gemfile_lock/Gemfile +5 -0
  81. data/spec/fixtures/repos/no_gemfile_lock/README +1 -0
  82. data/spec/fixtures/repos/nodejs/README +1 -0
  83. data/spec/fixtures/repos/nodejs/package.json +7 -0
  84. data/spec/fixtures/repos/not_bundled/README +1 -0
  85. data/spec/fixtures/{gemfiles/1.0.21-rails-31-with-sqlite → repos/sqlite3/Gemfile} +0 -0
  86. data/spec/fixtures/{lockfiles/1.0.21-rails-31-with-sqlite → repos/sqlite3/Gemfile.lock} +0 -0
  87. data/spec/fixtures/repos/sqlite3/README +1 -0
  88. data/spec/git_strategy_spec.rb +11 -2
  89. data/spec/lockfile_parser_spec.rb +8 -3
  90. data/spec/nodejs_deploy_spec.rb +1 -26
  91. data/spec/rails31_deploy_spec.rb +23 -31
  92. data/spec/services_deploy_spec.rb +41 -100
  93. data/spec/shell_spec.rb +50 -0
  94. data/spec/spec_helper.rb +80 -66
  95. data/spec/sqlite3_deploy_spec.rb +10 -16
  96. data/spec/support/integration.rb +45 -139
  97. metadata +233 -78
  98. data/lib/engineyard-serverside/logged_output.rb +0 -91
  99. data/spec/logged_output_spec.rb +0 -55
@@ -0,0 +1,71 @@
1
+ module EY
2
+ module Serverside
3
+ class Shell
4
+ class Formatter
5
+ def initialize(stdout, stderr, start_time, verbose)
6
+ @stdout, @stderr = stdout, stderr
7
+ @start = start_time.to_i
8
+ @verbose = verbose
9
+ end
10
+
11
+ def call(severity, time, _, message)
12
+ msg = build_message(severity, timestamp(time), message)
13
+ put_to_io(severity, msg)
14
+ msg
15
+ end
16
+
17
+ def build_message(severity, stamp, message)
18
+ if %w[WARN ERROR FATAL].include?(severity)
19
+ prepend("#{stamp}!> ", "#{message}")
20
+ elsif severity == "INFO"
21
+ prepend(stamp, message)
22
+ else
23
+ prepend(' ' * stamp.size, message)
24
+ end
25
+ end
26
+
27
+ def prepend(pre, str)
28
+ str.gsub(/^/, pre).sub(/\n?\z/m,"\n")
29
+ end
30
+
31
+ def put_to_io(severity, msg)
32
+ case severity
33
+ when "DEBUG"
34
+ if @verbose
35
+ @stdout << msg
36
+ end
37
+ when "INFO"
38
+ # Need to differentiate info messages more when we're running in verbose mode
39
+ @stdout << (@verbose && msg.index('~>') ? "\n#{thor_shell.set_color(msg, :white, true)}" : msg)
40
+ @stdout.flush
41
+ when "WARN"
42
+ @stderr << "\n" << thor_shell.set_color(msg, :yellow, true)
43
+ @stderr.flush
44
+ when "ERROR"
45
+ @stderr << "\n" << thor_shell.set_color(msg, :red, true)
46
+ @stderr.flush
47
+ else
48
+ @stderr << msg
49
+ @stderr.flush
50
+ end
51
+ end
52
+
53
+ def timestamp(datetime)
54
+ diff = datetime.to_i - @start
55
+ diff = 0 if diff < 0
56
+ div, mod = diff.divmod(60)
57
+ if div.zero?
58
+ "+ %02ds " % mod
59
+ else
60
+ "+%2dm %02ds " % [div,mod]
61
+ end
62
+ end
63
+
64
+ def thor_shell
65
+ thor_shell ||= Thor::Shell::Color.new
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+
@@ -0,0 +1,29 @@
1
+ module EY
2
+ module Serverside
3
+ class Shell
4
+ # Compatibility with old LoggedOutput where the module was included into the class.
5
+ module Helpers
6
+ def verbose?
7
+ shell.verbose?
8
+ end
9
+
10
+ def warning(*a)
11
+ shell.warning(*a)
12
+ end
13
+
14
+ def info(*a)
15
+ shell.info(*a)
16
+ end
17
+
18
+ def debug(*a)
19
+ shell.debug(*a)
20
+ end
21
+
22
+ def logged_system(*a)
23
+ shell.logged_system(*a)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
@@ -1,82 +1,48 @@
1
- require 'engineyard-serverside/logged_output'
2
-
3
1
  module EY
4
2
  module Serverside
5
3
  module Strategies
6
4
  class Git
7
- module Helpers
8
- def update_repository_cache
9
- unless strategy.fetch && strategy.checkout
10
- abort "*** [Error] Git could not checkout (#{strategy.to_checkout}) ***"
11
- end
12
- end
13
-
14
- def create_revision_file_command
15
- strategy.create_revision_file_command(c.release_path)
16
- end
17
-
18
- def short_log_message(revision)
19
- strategy.short_log_message(revision)
20
- end
5
+ attr_reader :shell, :opts
21
6
 
22
- def strategy
23
- # Ensure the git ssh config is up to date with the current app.
24
- ENV['GIT_SSH'] = ssh_executable
25
- klass = Module.nesting[1]
26
- # Use [] to access attributes instead of calling methods so
27
- # that we get nils instead of NoMethodError.
28
- #
29
- # Rollback doesn't know about the repository location (nor
30
- # should it need to), but it would like to use #short_log_message.
31
- klass.new(
32
- :repository_cache => c[:repository_cache],
33
- :app => c[:app],
34
- :repo => c[:repo],
35
- :ref => c[:branch]
36
- )
37
- end
7
+ def initialize(shell, opts)
8
+ @shell = shell
9
+ @opts = opts
38
10
  end
39
11
 
40
- include LoggedOutput
41
-
42
- attr_reader :opts
43
-
44
- def initialize(opts)
45
- @opts = opts
12
+ def update_repository_cache
13
+ unless fetch && checkout
14
+ abort "*** [Error] Git could not checkout (#{to_checkout}) ***"
15
+ end
46
16
  end
47
17
 
48
18
  def usable_repository?
49
- File.directory?(opts[:repository_cache]) && `#{git} remote -v | grep origin`[opts[:repo]]
19
+ File.directory?(repository_cache) && `#{git} remote -v | grep origin`[remote_uri]
50
20
  end
51
21
 
52
22
  def fetch
53
23
  if usable_repository?
54
- logged_system("#{git} fetch -q origin 2>&1")
24
+ run("#{git} fetch -q origin 2>&1")
55
25
  else
56
- FileUtils.rm_rf(opts[:repository_cache])
57
- logged_system("git clone -q #{opts[:repo]} #{opts[:repository_cache]} 2>&1")
26
+ FileUtils.rm_rf(repository_cache)
27
+ run("git clone -q #{remote_uri} #{repository_cache} 2>&1")
58
28
  end
59
29
  end
60
30
 
61
31
  def checkout
62
- info "~> Deploying revision #{short_log_message(to_checkout)}"
63
- in_git_work_tree do
64
- (logged_system("git checkout -q '#{to_checkout}'") ||
65
- logged_system("git reset -q --hard '#{to_checkout}'")) &&
66
- logged_system("git submodule sync") &&
67
- logged_system("git submodule update --init") &&
68
- logged_system("git clean -dfq")
32
+ shell.status "Deploying revision #{short_log_message(to_checkout)}"
33
+ in_repository_cache do
34
+ (run("git checkout -q '#{to_checkout}'") ||
35
+ run("git reset -q --hard '#{to_checkout}'")) &&
36
+ run("git submodule sync") &&
37
+ run("git submodule update --init") &&
38
+ run("git clean -dfq")
69
39
  end
70
40
  end
71
41
 
72
42
  def to_checkout
73
43
  return @to_checkout if @opts_ref == opts[:ref]
74
44
  @opts_ref = opts[:ref]
75
- @to_checkout = if branch?(opts[:ref])
76
- "origin/#{opts[:ref]}"
77
- else
78
- opts[:ref]
79
- end
45
+ @to_checkout = branch?(@opts_ref) ? "origin/#{@opts_ref}" : @opts_ref
80
46
  end
81
47
 
82
48
  def create_revision_file_command(dir)
@@ -88,24 +54,28 @@ module EY
88
54
  end
89
55
 
90
56
  private
91
- def in_git_work_tree
92
- Dir.chdir(git_work_tree) { yield }
57
+ def run(cmd)
58
+ shell.logged_system(cmd).success?
93
59
  end
94
60
 
95
- def git_work_tree
61
+ def in_repository_cache
62
+ Dir.chdir(repository_cache) { yield }
63
+ end
64
+
65
+ def remote_uri
66
+ opts[:repo]
67
+ end
68
+
69
+ def repository_cache
96
70
  opts[:repository_cache]
97
71
  end
98
72
 
99
73
  def git
100
- "git --git-dir #{git_work_tree}/.git --work-tree #{git_work_tree}"
74
+ "git --git-dir #{repository_cache}/.git --work-tree #{repository_cache}"
101
75
  end
102
76
 
103
77
  def branch?(ref)
104
- remote_branches = `#{git} branch -r`
105
- remote_branches.each_line do |line|
106
- return true if line.include?("origin/#{ref}")
107
- end
108
- false
78
+ system("#{git} show-branch origin/#{ref} > /dev/null 2>&1")
109
79
  end
110
80
  end
111
81
  end
@@ -1,12 +1,14 @@
1
+ require 'engineyard-serverside/shell/helpers'
2
+
1
3
  module EY
2
4
  module Serverside
3
5
  class Task
4
-
5
- attr_reader :config
6
+ attr_reader :config, :shell
6
7
  alias :c :config
7
8
 
8
- def initialize(conf)
9
+ def initialize(conf, shell = nil)
9
10
  @config = conf
11
+ @shell = shell
10
12
  @roles = :all
11
13
  end
12
14
 
@@ -18,7 +20,7 @@ module EY
18
20
  end
19
21
 
20
22
  if deploy_file
21
- puts "~> Loading deployment task overrides from #{deploy_file}"
23
+ shell.status "Loading deployment task overrides from #{deploy_file}"
22
24
  instance_eval(File.read(deploy_file))
23
25
  true
24
26
  else
@@ -26,6 +28,25 @@ module EY
26
28
  end
27
29
  end
28
30
 
31
+ def load_ey_yml
32
+ ey_yml = ["config/ey.yml", "ey.yml"].map do |short_file|
33
+ File.join(c.repository_cache, short_file)
34
+ end.detect do |file|
35
+ File.exist?(file)
36
+ end
37
+
38
+ if ey_yml
39
+ shell.status "Loading deploy configuration in #{ey_yml}"
40
+ data = YAML.load_file(ey_yml)
41
+ config.load_ey_yml_data(data, shell)
42
+ else
43
+ false
44
+ end
45
+ rescue Exception
46
+ shell.error "Error loading YAML in #{ey_yml}"
47
+ raise
48
+ end
49
+
29
50
  def roles(*task_roles)
30
51
  raise "Roles must be passed a block" unless block_given?
31
52
 
@@ -37,26 +58,26 @@ module EY
37
58
  end
38
59
  end
39
60
 
40
- # Returns +true+ if the command is successful,
41
- # raises EY::Serverside::RemoteFailure with a list of failures
42
- # otherwise.
43
61
  def run(cmd, &blk)
44
- run_on_roles(cmd, &blk)
62
+ run_on_roles('sh -l -c', cmd, &blk)
45
63
  end
46
64
 
47
65
  def sudo(cmd, &blk)
48
- run_on_roles(cmd, %w[sudo sh -l -c], &blk)
66
+ run_on_roles('sudo sh -l -c', cmd, &blk)
49
67
  end
50
68
 
51
69
  private
52
70
 
53
- def run_on_roles(cmd, wrapper=%w[sh -l -c], &block)
71
+ def run_on_roles(prefix, cmd, &block)
54
72
  servers = EY::Serverside::Server.from_roles(@roles)
55
- futures = EY::Serverside::Future.call(servers, block_given?) do |server, exec_block|
56
- to_run = exec_block ? block.call(server, cmd.dup) : cmd
57
- server.run(Escape.shell_command(wrapper + [to_run]))
73
+
74
+ commands = servers.map do |server|
75
+ exec_cmd = server.command_on_server(prefix, cmd, &block)
76
+ proc { shell.logged_system(exec_cmd) }
58
77
  end
59
78
 
79
+ futures = EY::Serverside::Future.call(commands)
80
+
60
81
  unless EY::Serverside::Future.success?(futures)
61
82
  failures = futures.select {|f| f.error? }.map {|f| f.inspect}.join("\n")
62
83
  raise EY::Serverside::RemoteFailure.new(failures)
@@ -1,5 +1,5 @@
1
1
  module EY
2
2
  module Serverside
3
- VERSION = '1.6.5'
3
+ VERSION = '1.7.0.pre2'
4
4
  end
5
5
  end
@@ -1,54 +1,19 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Deploying an application without Bundler" do
4
- before(:all) do
5
- $DISABLE_GEMFILE = true # Don't generate Gemfile/Gemfile.lock
6
- $DISABLE_LOCKFILE = true
7
- @deploy_dir = Pathname.new(Dir.tmpdir).join("serverside-deploy-#{Time.now.to_i}-#{$$}")
8
-
9
- # set up EY::Serverside::Server like we're on a solo
10
- EY::Serverside::Server.reset
11
- EY::Serverside::Server.add(:hostname => 'localhost', :roles => %w[solo])
12
-
13
- # run a deploy
14
- config = EY::Serverside::Deploy::Configuration.new({
15
- "strategy" => "IntegrationSpec",
16
- "deploy_to" => @deploy_dir.to_s,
17
- "group" => `id -gn`.strip,
18
- "stack" => 'nginx_passenger',
19
- "migrate" => nil,
20
- 'app' => 'foo',
21
- 'framework_env' => 'staging'
22
- })
23
-
24
- @binpath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
25
- @deployer = FullTestDeploy.new(config)
26
- @deployer.deploy
27
- end
28
-
29
- def exist
30
- be_exist
31
- end
32
-
33
- it "creates a REVISION file" do
34
- @deploy_dir.join('current', 'REVISION').should exist
35
- end
36
-
37
- it "restarts the app servers" do
38
- @deploy_dir.join('current', 'restart').should exist
3
+ describe "Deploying a simple application" do
4
+ context "without Bundler" do
5
+ before(:all) do
6
+ deploy_test_application('not_bundled')
7
+ end
8
+
9
+ it "creates a REVISION file" do
10
+ @deploy_dir.join('current', 'REVISION').should exist
11
+ end
12
+
13
+ it "restarts the app servers" do
14
+ restart = @deploy_dir.join('current', 'restart')
15
+ restart.should exist
16
+ restart.read.chomp.should == %|LANG="en_US.UTF-8" /engineyard/bin/app_rails31 deploy|
17
+ end
39
18
  end
40
-
41
- it "runs all the hooks" do
42
- @deploy_dir.join('current', 'before_bundle.ran' ).should exist
43
- @deploy_dir.join('current', 'after_bundle.ran' ).should exist
44
- @deploy_dir.join('current', 'before_migrate.ran').should exist
45
- @deploy_dir.join('current', 'after_migrate.ran' ).should exist
46
- @deploy_dir.join('current', 'before_compile_assets.ran').should exist
47
- @deploy_dir.join('current', 'after_compile_assets.ran' ).should exist
48
- @deploy_dir.join('current', 'before_symlink.ran').should exist
49
- @deploy_dir.join('current', 'after_symlink.ran' ).should exist
50
- @deploy_dir.join('current', 'before_restart.ran').should exist
51
- @deploy_dir.join('current', 'after_restart.ran' ).should exist
52
- end
53
-
54
19
  end
@@ -6,41 +6,9 @@ describe "Deploying an application that uses Bundler" do
6
6
  @version_pattern = Regexp.quote(@bundler_version)
7
7
  end
8
8
 
9
- def deploy_test_application
10
- @deploy_dir = File.join(Dir.tmpdir, "serverside-deploy-#{Time.now.to_i}-#{$$}")
11
-
12
- # set up EY::Serverside::Server like we're on a solo
13
- EY::Serverside::Server.reset
14
- EY::Serverside::Server.add(:hostname => 'localhost', :roles => %w[solo])
15
-
16
- # run a deploy
17
- config = EY::Serverside::Deploy::Configuration.new({
18
- "strategy" => "IntegrationSpec",
19
- "deploy_to" => @deploy_dir,
20
- "group" => `id -gn`.strip,
21
- "stack" => 'nginx_passenger',
22
- "migrate" => "ruby -e 'puts ENV[\"PATH\"]' > #{@deploy_dir}/path-when-migrating",
23
- 'app' => 'foo',
24
- 'framework_env' => 'staging',
25
- 'bundle_without' => 'release test',
26
- })
27
-
28
- # pretend there is a shared bundled_gems directory
29
- FileUtils.mkdir_p(File.join(@deploy_dir, 'shared', 'bundled_gems'))
30
- %w(RUBY_VERSION SYSTEM_VERSION).each do |name|
31
- File.open(File.join(@deploy_dir, 'shared', 'bundled_gems', name), "w") { |f| f.write("old\n") }
32
- end
33
-
34
- @binpath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
35
- @deployer = FullTestDeploy.new(config)
36
- @deployer.deploy
37
- end
38
-
39
9
  context "with a Gemfile.lock" do
40
10
  before(:all) do
41
- $DISABLE_GEMFILE = false
42
- $DISABLE_LOCKFILE = false
43
- deploy_test_application
11
+ deploy_test_application('ey_yml')
44
12
  end
45
13
 
46
14
  it "runs the right bundler command" do
@@ -69,12 +37,6 @@ describe "Deploying an application that uses Bundler" do
69
37
  File.read(File.join(@deploy_dir, 'path-when-migrating')).should include('ey_bundler_binstubs')
70
38
  end
71
39
 
72
- it "runs 'bundle install' with custom --without options" do
73
- bundle_install_cmd = @deployer.commands.grep(/bundle _\S+_ install/).first
74
- bundle_install_cmd.should_not be_nil
75
- bundle_install_cmd.should include("--without release test")
76
- end
77
-
78
40
  it "creates a ruby version file" do
79
41
  File.exist?(File.join(@deploy_dir, 'shared', 'bundled_gems', 'RUBY_VERSION')).should be_true
80
42
  end
@@ -90,13 +52,10 @@ describe "Deploying an application that uses Bundler" do
90
52
 
91
53
  context "without a Gemfile.lock" do
92
54
  before(:all) do
93
- $DISABLE_GEMFILE = false
94
- $DISABLE_LOCKFILE = true
95
- deploy_test_application
55
+ deploy_test_application('no_gemfile_lock')
96
56
  end
97
57
 
98
58
  it "installs the proper Bundler version" do
99
- @bundler_version.should == "1.0.21" # Something should break when the default changes.
100
59
  install_bundler_command_ran = @deployer.commands.detect{ |command| command.index("install_bundler") }
101
60
  install_bundler_command_ran.should_not be_nil
102
61
  install_bundler_command_ran.should include("#{@binpath} install_bundler #{@bundler_version}")
@@ -116,7 +75,7 @@ describe "Deploying an application that uses Bundler" do
116
75
  File.exist?(File.join(@deploy_dir, 'shared', 'bundled_gems', 'SYSTEM_VERSION')).should be_true
117
76
  end
118
77
 
119
- it "Sets GIT_SSH environment variable" do
78
+ it "sets GIT_SSH environment variable" do
120
79
  install_cmd = @deployer.commands.grep(/GIT_SSH/).first
121
80
  install_cmd.should match(/export GIT_SSH.*install_bundler/)
122
81
  end