engineyard-serverside 1.4.16 → 1.5.0

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.
@@ -14,6 +14,7 @@ module EY
14
14
  def deploy
15
15
  debug "Starting deploy at #{Time.now.asctime}"
16
16
  update_repository_cache
17
+ check_repository
17
18
  cached_deploy
18
19
  end
19
20
 
@@ -50,6 +51,16 @@ module EY
50
51
  raise
51
52
  end
52
53
 
54
+ def check_repository
55
+ if gemfile? && lockfile
56
+ unless lockfile.any_database_adapter?
57
+ info "!> WARNING: Gemfile.lock does not contain any recognized database adapter!"
58
+ info "!> We expected to find mysql2, mysql or other database adapter gem."
59
+ info "!> This could prevent booting of applications that use MySQL or Postgres."
60
+ end
61
+ end
62
+ end
63
+
53
64
  def restart_with_maintenance_page
54
65
  require_custom_tasks
55
66
  conditionally_enable_maintenance_page
@@ -138,50 +149,8 @@ module EY
138
149
 
139
150
  # task
140
151
  def bundle
141
- if File.exist?("#{c.release_path}/Gemfile")
142
- info "~> Gemfile detected, bundling gems"
143
- lockfile = File.join(c.release_path, "Gemfile.lock")
144
-
145
- bundler_installer = if File.exist?(lockfile)
146
- get_bundler_installer(lockfile)
147
- else
148
- warn_about_missing_lockfile
149
- get_default_bundler_installer
150
- end
151
-
152
- sudo "#{clean_environment} #{serverside_bin} install_bundler #{bundler_installer.version}"
153
-
154
- bundled_gems_path = File.join(c.shared_path, "bundled_gems")
155
- ruby_version_file = File.join(bundled_gems_path, "RUBY_VERSION")
156
- system_version_file = File.join(bundled_gems_path, "SYSTEM_VERSION")
157
- ruby_version = `ruby -v`
158
- system_version = `uname -m`
159
-
160
- if File.directory?(bundled_gems_path)
161
- rebundle = false
162
-
163
- rebundle = true if File.exist?(ruby_version_file) && File.read(ruby_version_file) != ruby_version
164
- rebundle = true if File.exist?(system_version_file) && File.read(system_version_file) != system_version
165
-
166
- if rebundle
167
- info "~> Ruby version change detected, cleaning bundled gems"
168
- run "rm -Rf #{bundled_gems_path}"
169
- end
170
- end
171
-
172
- run "cd #{c.release_path} && #{clean_environment} ruby -S bundle _#{bundler_installer.version}_ install #{bundler_installer.options}"
173
-
174
- run "mkdir -p #{bundled_gems_path} && ruby -v > #{ruby_version_file} && uname -m > #{system_version_file}"
175
- end
176
-
177
- if File.exist?("#{c.release_path}/package.json")
178
- unless run("which npm")
179
- abort "*** [Error] package.json detected, but npm was not installed"
180
- else
181
- info "~> package.json detected, installing npm packages"
182
- run "cd #{c.release_path} && npm install"
183
- end
184
- end
152
+ check_ruby_bundler
153
+ check_node_npm
185
154
  end
186
155
 
187
156
  # task
@@ -291,6 +260,10 @@ module EY
291
260
 
292
261
  protected
293
262
 
263
+ def gemfile?
264
+ File.exist?("#{c.release_path}/Gemfile")
265
+ end
266
+
294
267
  def base_callback_command_for(what)
295
268
  [serverside_bin, 'hook', what.to_s,
296
269
  '--app', config.app.to_s,
@@ -341,35 +314,31 @@ module EY
341
314
  info "!> You can get different gems in production than what you tested with."
342
315
  info "!> You can get different gems on every deployment even if your Gemfile hasn't changed."
343
316
  info "!> Deploying may take a long time."
317
+ info "!> There is a slight, but very serious chance of a Zerg rush overtaking your base."
344
318
  info "!>"
345
319
  info "!> Fix this by running \"git add Gemfile.lock; git commit\" and deploying again."
346
- info "!> If you don't have a Gemfile.lock, run \"bundle lock\" to create one."
347
320
  info "!>"
348
321
  info "!> This deployment will use bundler #{LockfileParser.default_version} to run 'bundle install'."
349
322
  info "!>"
350
323
  end
351
324
 
352
- def get_bundler_installer(lockfile)
353
- parser = LockfileParser.new(File.read(lockfile))
354
- case parser.lockfile_version
355
- when :bundler09
356
- bundler_09_installer(parser.bundler_version)
357
- when :bundler10
358
- bundler_10_installer(parser.bundler_version)
325
+ def get_bundler_installer
326
+ if lockfile
327
+ bundler_10_installer(lockfile.bundler_version)
359
328
  else
360
- raise "Unknown lockfile version #{parser.lockfile_version}"
329
+ warn_about_missing_lockfile
330
+ # deployment mode is not supported without a Gemfile.lock, so we turn that off.
331
+ bundler_10_installer(LockfileParser.default_version, deployment_mode = false)
361
332
  end
362
333
  end
363
- public :get_bundler_installer
364
334
 
365
- def get_default_bundler_installer
366
- # deployment mode is not supported without a Gemfile.lock, so we turn that off.
367
- bundler_10_installer(LockfileParser.default_version, deployment_mode = false)
368
- end
369
- public :get_default_bundler_installer
370
-
371
- def bundler_09_installer(version)
372
- BundleInstaller.new(version, '--without=development --without=test')
335
+ def lockfile
336
+ lockfile_path = File.join(c.release_path, "Gemfile.lock")
337
+ if File.exist?(lockfile_path)
338
+ @lockfile_parser ||= LockfileParser.new(File.read(lockfile_path))
339
+ else
340
+ nil
341
+ end
373
342
  end
374
343
 
375
344
  # Set +deploymemt_mode+ to false to avoid passing the --deployment flag.
@@ -380,6 +349,49 @@ module EY
380
349
  options.unshift('--deployment') if deployment_mode
381
350
  BundleInstaller.new(version, options.join(' '))
382
351
  end
352
+
353
+ def check_ruby_bundler
354
+ if gemfile?
355
+ info "~> Gemfile detected, bundling gems"
356
+
357
+ bundler_installer = get_bundler_installer
358
+
359
+ sudo "#{clean_environment} #{serverside_bin} install_bundler #{bundler_installer.version}"
360
+
361
+ bundled_gems_path = File.join(c.shared_path, "bundled_gems")
362
+ ruby_version_file = File.join(bundled_gems_path, "RUBY_VERSION")
363
+ system_version_file = File.join(bundled_gems_path, "SYSTEM_VERSION")
364
+ ruby_version = `ruby -v`
365
+ system_version = `uname -m`
366
+
367
+ if File.directory?(bundled_gems_path)
368
+ rebundle = false
369
+
370
+ rebundle = true if File.exist?(ruby_version_file) && File.read(ruby_version_file) != ruby_version
371
+ rebundle = true if File.exist?(system_version_file) && File.read(system_version_file) != system_version
372
+
373
+ if rebundle
374
+ info "~> Ruby version change detected, cleaning bundled gems"
375
+ run "rm -Rf #{bundled_gems_path}"
376
+ end
377
+ end
378
+
379
+ run "cd #{c.release_path} && #{clean_environment} ruby -S bundle _#{bundler_installer.version}_ install #{bundler_installer.options}"
380
+
381
+ run "mkdir -p #{bundled_gems_path} && ruby -v > #{ruby_version_file} && uname -m > #{system_version_file}"
382
+ end
383
+ end
384
+
385
+ def check_node_npm
386
+ if File.exist?("#{c.release_path}/package.json")
387
+ unless run("which npm")
388
+ abort "*** [Error] package.json detected, but npm was not installed"
389
+ else
390
+ info "~> package.json detected, installing npm packages"
391
+ run "cd #{c.release_path} && npm install"
392
+ end
393
+ end
394
+ end
383
395
  end # DeployBase
384
396
 
385
397
  class Deploy < DeployBase
@@ -55,6 +55,14 @@ module EY
55
55
  system(Escape.shell_command(["sudo", "sh", "-l", "-c", cmd]))
56
56
  end
57
57
 
58
+ def info(*args)
59
+ $stderr.puts *args
60
+ end
61
+
62
+ def debug(*args)
63
+ $stdout.puts *args
64
+ end
65
+
58
66
  # convenience functions for running on certain instance types
59
67
  def on_app_master(&blk) on_roles(%w[solo app_master], &blk) end
60
68
  def on_app_servers(&blk) on_roles(%w[solo app_master app], &blk) end
@@ -2,129 +2,86 @@ require 'yaml'
2
2
  module EY
3
3
  module Serverside
4
4
  class LockfileParser
5
+ DEFAULT = "1.0.10"
6
+
5
7
  def self.default_version
6
- Parse10::DEFAULT
8
+ DEFAULT
7
9
  end
8
10
 
9
11
  attr_reader :bundler_version, :lockfile_version
10
12
 
11
13
  def initialize(lockfile_contents)
12
- @lockfile_version, @bundler_version = Parse106.new(lockfile_contents).parse
14
+ @contents = lockfile_contents
15
+ parse
13
16
  end
14
17
 
15
- class BaseParser
16
- def initialize(contents)
17
- @contents = contents
18
- end
19
- def parse
20
- raise "Unknown lockfile format #{@contents[0,50]}..."
18
+ def any_database_adapter?
19
+ %w[mysql2 mysql do_mysql pg do_postgres].any? do |gem|
20
+ @contents.index(/^\s+#{gem}\s\([^\)]+\)$/)
21
21
  end
22
22
  end
23
23
 
24
- class Parse09 < BaseParser
25
- DEFAULT = "0.9.26"
24
+ def parse
25
+ parse_from_metadata ||
26
+ parse_from_dependencies ||
27
+ raise("Malformed or pre bundler-1.0.0 Gemfile.lock: #{@contents[0,50]}...")
28
+ end
26
29
 
27
- def parse
28
- from_yaml = safe_yaml_load(@contents)
29
- unless from_yaml.is_a?(Hash)
30
- return super
31
- end
32
- bundler_version = from_yaml['specs'].map do |spec|
33
- # spec is a one-element hash: the key is the gem name, and
34
- # the value is {"version" => the-version}.
35
- if spec.keys.first == "bundler"
36
- spec.values.first["version"]
37
- end
38
- end.compact.first
39
- [:bundler09, bundler_version || DEFAULT]
40
- end
41
- def safe_yaml_load(loadable)
42
- YAML.load(loadable) #won't always raise... soemtimes parses the contents as 1 big string
43
- rescue ArgumentError, SyntaxError # not yaml
44
- nil
30
+ def slice_section(header)
31
+ if start = @contents.index(/^#{header}/)
32
+ finish = @contents.index(/(^\S|\Z)/, start + header.length)
33
+ @contents.slice(start..finish)
34
+ else
35
+ ""
45
36
  end
46
37
  end
47
38
 
48
- class Parse10 < Parse09
49
- DEFAULT = "1.0.10"
50
-
51
- def parse
52
- unless @contents.index(/^DEPENDENCIES/)
53
- return super
54
- end
55
- dep_section = ""
56
- in_dependencies_section = false
57
- @contents.each_line do |line|
58
- if line =~ /^DEPENDENCIES/
59
- in_dependencies_section = true
60
- elsif line =~ /^\S/
61
- in_dependencies_section = false
62
- elsif in_dependencies_section
63
- dep_section << line
64
- end
65
- end
66
-
67
- unless dep_section.length > 0
68
- raise "Couldn't parse #{@contents}; exiting"
69
- exit(1)
70
- end
39
+ def parse_from_metadata
40
+ section = slice_section('METADATA')
71
41
 
72
- result = scan_bundler(dep_section)
73
- bundler_version = result ? result.last : nil
74
- version_qualifier = result ? result.first : nil
75
- [:bundler10, fetch_version(bundler_version, version_qualifier)]
42
+ if section.empty?
43
+ return nil
76
44
  end
77
45
 
78
- def fetch_version(bundler_version, version_qualifier)
79
- return bundler_version || DEFAULT unless version_qualifier
46
+ result = section.scan(/^\s*version:\s*(.*)$/).first
47
+ @lockfile_version = :bundler10
48
+ @bundler_version = result ? result.first : DEFAULT
49
+ end
80
50
 
81
- case version_qualifier
82
- when '='
83
- bundler_version
84
- when '>='
85
- Gem::Version.new(bundler_version) > Gem::Version.new(DEFAULT) ? bundler_version : DEFAULT
86
- when '~>'
87
- bundler_gem_version = Gem::Version.new(bundler_version)
88
- recommendation = bundler_gem_version.spermy_recommendation.gsub(/~>\s*(.+)$/, '\1.')
89
- recommends_default = DEFAULT.index(recommendation) == 0
90
- default_newer_than_requested = Gem::Version.new(DEFAULT) > bundler_gem_version
91
- (recommends_default && default_newer_than_requested) ? DEFAULT : bundler_version
92
- end
93
- end
51
+ def parse_from_dependencies
52
+ section = slice_section('DEPENDENCIES')
94
53
 
95
- def scan_bundler(dep_section)
96
- dep_section.scan(/^\s*bundler\s*\((>?=|~>)\s*([^,\)]+)/).first
54
+ if section.empty?
55
+ return nil
97
56
  end
98
- end
99
57
 
100
- class Parse106 < Parse10
101
- def parse
102
- unless @contents.index(/^METADATA/)
103
- return super
104
- end
105
- meta_section = ""
106
- in_meta_section = false
107
- @contents.each_line do |line|
108
- if line =~ /^METADATA/
109
- in_meta_section = true
110
- elsif line =~ /^\S/
111
- in_meta_section = false
112
- elsif in_meta_section
113
- meta_section << line
114
- end
115
- end
116
-
117
- unless meta_section.length > 0
118
- raise "Couldn't parse #{@contents}; exiting"
119
- exit(1)
120
- end
58
+ result = scan_bundler(section)
59
+ bundler_version = result ? result.last : nil
60
+ version_qualifier = result ? result.first : nil
61
+ @lockfile_version = :bundler10
62
+ @bundler_version = fetch_version(bundler_version, version_qualifier)
63
+ end
121
64
 
122
- result = meta_section.scan(/^\s*version:\s*(.*)$/).first
123
- bundler_version = result ? result.first : DEFAULT
124
- [:bundler10, bundler_version]
65
+ def fetch_version(bundler_version, version_qualifier)
66
+ return bundler_version || DEFAULT unless version_qualifier
67
+
68
+ case version_qualifier
69
+ when '='
70
+ bundler_version
71
+ when '>='
72
+ Gem::Version.new(bundler_version) > Gem::Version.new(DEFAULT) ? bundler_version : DEFAULT
73
+ when '~>'
74
+ bundler_gem_version = Gem::Version.new(bundler_version)
75
+ recommendation = bundler_gem_version.spermy_recommendation.gsub(/~>\s*(.+)$/, '\1.')
76
+ recommends_default = DEFAULT.index(recommendation) == 0
77
+ default_newer_than_requested = Gem::Version.new(DEFAULT) > bundler_gem_version
78
+ (recommends_default && default_newer_than_requested) ? DEFAULT : bundler_version
125
79
  end
126
80
  end
127
81
 
82
+ def scan_bundler(dep_section)
83
+ dep_section.scan(/^\s*bundler\s*\((>?=|~>)\s*([^,\)]+)/).first
84
+ end
128
85
  end
129
86
  end
130
87
  end
@@ -1,5 +1,5 @@
1
1
  module EY
2
2
  module Serverside
3
- VERSION = '1.4.16'
3
+ VERSION = '1.5.0'
4
4
  end
5
5
  end
@@ -6,6 +6,7 @@ describe "the EY::Serverside::Deploy API" do
6
6
  # This happens before require_custom_tasks, so it's not
7
7
  # overrideable. That's why it's not in @call_order.
8
8
  def update_repository_cache() end
9
+ def check_repository() end
9
10
 
10
11
  # cheat a bit; we don't actually want to do these things
11
12
  def require_custom_tasks() end
@@ -1,59 +1,78 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "the bundler version retrieved from the lockfile" do
4
- def get_full_path(file)
5
- File.expand_path("../support/lockfiles/#{file}", __FILE__)
4
+ def load_lockfile(file)
5
+ File.read(File.expand_path("../support/lockfiles/#{file}", __FILE__))
6
6
  end
7
- def get_version(file)
8
- @config = EY::Serverside::Deploy::Configuration.new('deploy_to' => 'dontcare')
9
- EY::Serverside::DeployBase.new(@config).get_bundler_installer(get_full_path(file)).version
7
+
8
+ def get_parser(file)
9
+ EY::Serverside::LockfileParser.new(load_lockfile(file))
10
10
  end
11
11
 
12
- it "returns the default version for an 0.9 lockfile without a bundler dependency" do
13
- get_version('0.9-no-bundler').should == EY::Serverside::LockfileParser::Parse09::DEFAULT
12
+ def get_version(file)
13
+ get_parser(file).bundler_version
14
14
  end
15
15
 
16
- it "gets the version from an 0.9 lockfile with a bundler dependency" do
17
- get_version('0.9-with-bundler').should == '0.9.24'
16
+ it "raises an error with pre 0.9 bundler lockfiles" do
17
+ lambda { get_version('0.9-no-bundler') }.should raise_error(RuntimeError, /Malformed or pre bundler-1.0.0 Gemfile.lock/)
18
+ lambda { get_version('0.9-with-bundler') }.should raise_error(RuntimeError, /Malformed or pre bundler-1.0.0 Gemfile.lock/)
18
19
  end
19
20
 
20
21
  it "returns the default version for a 1.0 lockfile without a bundler dependency" do
21
- get_version('1.0-no-bundler').should == EY::Serverside::LockfileParser::Parse10::DEFAULT
22
+ get_version('1.0-no-bundler').should == EY::Serverside::LockfileParser::DEFAULT
22
23
  end
23
24
 
24
25
  it "gets the version from a 1.0.0.rc.1 lockfile w/dependency on 1.0.0.rc.1" do
25
- # This is a real, customer-generated lockfile
26
26
  get_version('1.0.0.rc.1-with-bundler').should == '1.0.0.rc.1'
27
27
  end
28
28
 
29
29
  it "gets the version from a 1.0.6 lockfile w/dependency on 1.0.6" do
30
- # This is a real, customer-generated lockfile
31
30
  get_version('1.0.6-with-bundler').should == '1.0.6'
32
31
  end
33
32
 
34
33
  it "gets the version from a 1.0.6 lockfile w/dependency on 1.0.6 (bundled ~> 1.0.0)" do
35
- # This is a real, customer-generated lockfile
36
34
  get_version('1.0.6-with-any-bundler').should == '1.0.6'
37
35
  end
38
36
 
39
37
  it "gets the version from a 1.0.6 lockfile w/o dependency" do
40
- # This is a real, customer-generated lockfile
41
38
  get_version('1.0.6-no-bundler').should == '1.0.6'
42
39
  end
43
40
 
44
41
  it "raises an error if it can't parse the file" do
45
- lambda { get_version('not-a-lockfile') }.should raise_error(RuntimeError, /Unknown lockfile format/)
42
+ lambda { get_version('not-a-lockfile') }.should raise_error(RuntimeError, /Malformed or pre bundler-1.0.0 Gemfile.lock/)
46
43
  end
47
44
 
48
- it "raises an error if it can't parse evil yaml" do
49
- lambda { get_version('evil-yaml') }.should raise_error(RuntimeError, /Unknown lockfile format/)
45
+ context "checking for gems in the dependencies" do
46
+ it "does not have any database adapters in a gemfile lock without them" do
47
+ get_parser('1.0.6-no-bundler').any_database_adapter?.should be_false
48
+ end
49
+
50
+ it "has a database adapter in a Gemfile.lock with do_mysql" do
51
+ get_parser('1.0.18-do_mysql').any_database_adapter?.should be_true
52
+ end
53
+
54
+ it "has a database adapter in a Gemfile.lock with mysql" do
55
+ get_parser('1.0.18-mysql').any_database_adapter?.should be_true
56
+ end
57
+
58
+ it "has a database adapter in a Gemfile.lock with mysql2" do
59
+ get_parser('1.0.18-mysql2').any_database_adapter?.should be_true
60
+ end
61
+
62
+ it "has a database adapter in a Gemfile.lock with pg" do
63
+ get_parser('1.0.18-pg').any_database_adapter?.should be_true
64
+ end
65
+
66
+ it "has a database adapter in a Gemfile.lock with do_postgres" do
67
+ get_parser('1.0.18-do_postgres').any_database_adapter?.should be_true
68
+ end
50
69
  end
51
70
 
52
71
  context "fetching the right version number" do
53
- subject { EY::Serverside::LockfileParser::Parse10.new(get_full_path('1.0.6-no-bundler')) }
72
+ subject { get_parser('1.0.6-no-bundler') }
54
73
 
55
74
  it "uses the default version when there is no bundler version" do
56
- subject.fetch_version(nil, nil).should == EY::Serverside::LockfileParser::Parse10::DEFAULT
75
+ subject.fetch_version(nil, nil).should == EY::Serverside::LockfileParser::DEFAULT
57
76
  end
58
77
 
59
78
  it "uses the given version when the qualifier is `='" do
@@ -73,7 +92,7 @@ describe "the bundler version retrieved from the lockfile" do
73
92
  end
74
93
 
75
94
  it "uses the default version when the given version is lower" do
76
- subject.fetch_version('1.0.1', '>=').should == EY::Serverside::LockfileParser::Parse10::DEFAULT
95
+ subject.fetch_version('1.0.1', '>=').should == EY::Serverside::LockfileParser::DEFAULT
77
96
  end
78
97
 
79
98
  it "selects only the first version expression" do
@@ -63,7 +63,7 @@ class FullTestDeploy < EY::Serverside::Deploy
63
63
  result
64
64
  end
65
65
 
66
- def get_bundler_installer(lockfile)
66
+ def get_bundler_installer
67
67
  installer = super
68
68
  installer.options << ' --quiet' # stfu already!
69
69
  installer
@@ -0,0 +1,88 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.2.6)
5
+ bcrypt-ruby (2.1.4)
6
+ data_objects (0.10.6)
7
+ addressable (~> 2.1)
8
+ datamapper (1.1.0)
9
+ dm-aggregates (= 1.1.0)
10
+ dm-constraints (= 1.1.0)
11
+ dm-core (= 1.1.0)
12
+ dm-migrations (= 1.1.0)
13
+ dm-serializer (= 1.1.0)
14
+ dm-timestamps (= 1.1.0)
15
+ dm-transactions (= 1.1.0)
16
+ dm-types (= 1.1.0)
17
+ dm-validations (= 1.1.0)
18
+ diff-lcs (1.1.3)
19
+ dm-aggregates (1.1.0)
20
+ dm-core (~> 1.1.0)
21
+ dm-constraints (1.1.0)
22
+ dm-core (~> 1.1.0)
23
+ dm-core (1.1.0)
24
+ addressable (~> 2.2.4)
25
+ dm-do-adapter (1.1.0)
26
+ data_objects (~> 0.10.2)
27
+ dm-core (~> 1.1.0)
28
+ dm-migrations (1.1.0)
29
+ dm-core (~> 1.1.0)
30
+ dm-mysql-adapter (1.1.0)
31
+ dm-do-adapter (~> 1.1.0)
32
+ do_mysql (~> 0.10.2)
33
+ dm-serializer (1.1.0)
34
+ dm-core (~> 1.1.0)
35
+ fastercsv (~> 1.5.4)
36
+ json (~> 1.4.6)
37
+ dm-sqlite-adapter (1.1.0)
38
+ dm-do-adapter (~> 1.1.0)
39
+ do_sqlite3 (~> 0.10.2)
40
+ dm-timestamps (1.1.0)
41
+ dm-core (~> 1.1.0)
42
+ dm-transactions (1.1.0)
43
+ dm-core (~> 1.1.0)
44
+ dm-types (1.1.0)
45
+ bcrypt-ruby (~> 2.1.4)
46
+ dm-core (~> 1.1.0)
47
+ fastercsv (~> 1.5.4)
48
+ json (~> 1.4.6)
49
+ stringex (~> 1.2.0)
50
+ uuidtools (~> 2.1.2)
51
+ dm-validations (1.1.0)
52
+ dm-core (~> 1.1.0)
53
+ do_mysql (0.10.6)
54
+ data_objects (= 0.10.6)
55
+ do_sqlite3 (0.10.6)
56
+ data_objects (= 0.10.6)
57
+ fastercsv (1.5.4)
58
+ json (1.4.6)
59
+ rack (1.3.3)
60
+ rake (0.9.2)
61
+ rspec (2.6.0)
62
+ rspec-core (~> 2.6.0)
63
+ rspec-expectations (~> 2.6.0)
64
+ rspec-mocks (~> 2.6.0)
65
+ rspec-core (2.6.4)
66
+ rspec-expectations (2.6.0)
67
+ diff-lcs (~> 1.1.2)
68
+ rspec-mocks (2.6.0)
69
+ shotgun (0.9)
70
+ rack (>= 1.0)
71
+ sinatra (1.2.6)
72
+ rack (~> 1.1)
73
+ tilt (>= 1.2.2, < 2.0)
74
+ stringex (1.2.2)
75
+ tilt (1.3.3)
76
+ uuidtools (2.1.2)
77
+
78
+ PLATFORMS
79
+ ruby
80
+
81
+ DEPENDENCIES
82
+ datamapper (~> 1.1.0)
83
+ dm-mysql-adapter
84
+ dm-sqlite-adapter
85
+ rake
86
+ rspec (~> 2.0)
87
+ shotgun
88
+ sinatra
@@ -0,0 +1,79 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.2.6)
5
+ bcrypt-ruby (2.1.4)
6
+ data_objects (0.10.5)
7
+ addressable (~> 2.1)
8
+ datamapper (1.1.0)
9
+ dm-aggregates (= 1.1.0)
10
+ dm-constraints (= 1.1.0)
11
+ dm-core (= 1.1.0)
12
+ dm-migrations (= 1.1.0)
13
+ dm-serializer (= 1.1.0)
14
+ dm-timestamps (= 1.1.0)
15
+ dm-transactions (= 1.1.0)
16
+ dm-types (= 1.1.0)
17
+ dm-validations (= 1.1.0)
18
+ diff-lcs (1.1.3)
19
+ dm-aggregates (1.1.0)
20
+ dm-core (~> 1.1.0)
21
+ dm-constraints (1.1.0)
22
+ dm-core (~> 1.1.0)
23
+ dm-core (1.1.0)
24
+ addressable (~> 2.2.4)
25
+ dm-do-adapter (1.1.0)
26
+ data_objects (~> 0.10.2)
27
+ dm-core (~> 1.1.0)
28
+ dm-migrations (1.1.0)
29
+ dm-core (~> 1.1.0)
30
+ dm-postgres-adapter (1.1.0)
31
+ dm-do-adapter (~> 1.1.0)
32
+ do_postgres (~> 0.10.2)
33
+ dm-serializer (1.1.0)
34
+ dm-core (~> 1.1.0)
35
+ fastercsv (~> 1.5.4)
36
+ json (~> 1.4.6)
37
+ dm-timestamps (1.1.0)
38
+ dm-core (~> 1.1.0)
39
+ dm-transactions (1.1.0)
40
+ dm-core (~> 1.1.0)
41
+ dm-types (1.1.0)
42
+ bcrypt-ruby (~> 2.1.4)
43
+ dm-core (~> 1.1.0)
44
+ fastercsv (~> 1.5.4)
45
+ json (~> 1.4.6)
46
+ stringex (~> 1.2.0)
47
+ uuidtools (~> 2.1.2)
48
+ dm-validations (1.1.0)
49
+ dm-core (~> 1.1.0)
50
+ do_postgres (0.10.5)
51
+ data_objects (= 0.10.5)
52
+ fastercsv (1.5.4)
53
+ json (1.4.6)
54
+ rack (1.3.3)
55
+ rake (0.9.2)
56
+ rspec (2.6.0)
57
+ rspec-core (~> 2.6.0)
58
+ rspec-expectations (~> 2.6.0)
59
+ rspec-mocks (~> 2.6.0)
60
+ rspec-core (2.6.4)
61
+ rspec-expectations (2.6.0)
62
+ diff-lcs (~> 1.1.2)
63
+ rspec-mocks (2.6.0)
64
+ sinatra (1.2.6)
65
+ rack (~> 1.1)
66
+ tilt (>= 1.2.2, < 2.0)
67
+ stringex (1.2.2)
68
+ tilt (1.3.3)
69
+ uuidtools (2.1.2)
70
+
71
+ PLATFORMS
72
+ ruby
73
+
74
+ DEPENDENCIES
75
+ datamapper (>= 1.1)
76
+ dm-postgres-adapter
77
+ rake
78
+ rspec (~> 2.0)
79
+ sinatra
@@ -0,0 +1,43 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.0.7)
5
+ activesupport (= 3.0.7)
6
+ builder (~> 2.1.2)
7
+ i18n (~> 0.5.0)
8
+ activerecord (3.0.7)
9
+ activemodel (= 3.0.7)
10
+ activesupport (= 3.0.7)
11
+ arel (~> 2.0.2)
12
+ tzinfo (~> 0.3.23)
13
+ activesupport (3.0.7)
14
+ arel (2.0.9)
15
+ builder (2.1.2)
16
+ diff-lcs (1.1.3)
17
+ i18n (0.5.0)
18
+ mysql (2.8.1)
19
+ rack (1.3.3)
20
+ rake (0.9.2)
21
+ rspec (2.6.0)
22
+ rspec-core (~> 2.6.0)
23
+ rspec-expectations (~> 2.6.0)
24
+ rspec-mocks (~> 2.6.0)
25
+ rspec-core (2.6.4)
26
+ rspec-expectations (2.6.0)
27
+ diff-lcs (~> 1.1.2)
28
+ rspec-mocks (2.6.0)
29
+ sinatra (1.2.6)
30
+ rack (~> 1.1)
31
+ tilt (>= 1.2.2, < 2.0)
32
+ tilt (1.3.3)
33
+ tzinfo (0.3.28)
34
+
35
+ PLATFORMS
36
+ ruby
37
+
38
+ DEPENDENCIES
39
+ activerecord (>= 3.0)
40
+ mysql
41
+ rake
42
+ rspec (~> 2.0)
43
+ sinatra
@@ -0,0 +1,43 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.0.7)
5
+ activesupport (= 3.0.7)
6
+ builder (~> 2.1.2)
7
+ i18n (~> 0.5.0)
8
+ activerecord (3.0.7)
9
+ activemodel (= 3.0.7)
10
+ activesupport (= 3.0.7)
11
+ arel (~> 2.0.2)
12
+ tzinfo (~> 0.3.23)
13
+ activesupport (3.0.7)
14
+ arel (2.0.9)
15
+ builder (2.1.2)
16
+ diff-lcs (1.1.3)
17
+ i18n (0.5.0)
18
+ mysql2 (0.2.7)
19
+ rack (1.3.3)
20
+ rake (0.9.2)
21
+ rspec (2.6.0)
22
+ rspec-core (~> 2.6.0)
23
+ rspec-expectations (~> 2.6.0)
24
+ rspec-mocks (~> 2.6.0)
25
+ rspec-core (2.6.4)
26
+ rspec-expectations (2.6.0)
27
+ diff-lcs (~> 1.1.2)
28
+ rspec-mocks (2.6.0)
29
+ sinatra (1.2.6)
30
+ rack (~> 1.1)
31
+ tilt (>= 1.2.2, < 2.0)
32
+ tilt (1.3.3)
33
+ tzinfo (0.3.28)
34
+
35
+ PLATFORMS
36
+ ruby
37
+
38
+ DEPENDENCIES
39
+ activerecord (>= 3.0)
40
+ mysql2
41
+ rake
42
+ rspec (~> 2.0)
43
+ sinatra
@@ -0,0 +1,43 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.0.7)
5
+ activesupport (= 3.0.7)
6
+ builder (~> 2.1.2)
7
+ i18n (~> 0.5.0)
8
+ activerecord (3.0.7)
9
+ activemodel (= 3.0.7)
10
+ activesupport (= 3.0.7)
11
+ arel (~> 2.0.2)
12
+ tzinfo (~> 0.3.23)
13
+ activesupport (3.0.7)
14
+ arel (2.0.9)
15
+ builder (2.1.2)
16
+ diff-lcs (1.1.3)
17
+ i18n (0.5.0)
18
+ pg (0.11.0)
19
+ rack (1.3.3)
20
+ rake (0.9.2)
21
+ rspec (2.6.0)
22
+ rspec-core (~> 2.6.0)
23
+ rspec-expectations (~> 2.6.0)
24
+ rspec-mocks (~> 2.6.0)
25
+ rspec-core (2.6.4)
26
+ rspec-expectations (2.6.0)
27
+ diff-lcs (~> 1.1.2)
28
+ rspec-mocks (2.6.0)
29
+ sinatra (1.2.6)
30
+ rack (~> 1.1)
31
+ tilt (>= 1.2.2, < 2.0)
32
+ tilt (1.3.3)
33
+ tzinfo (0.3.28)
34
+
35
+ PLATFORMS
36
+ ruby
37
+
38
+ DEPENDENCIES
39
+ activerecord (>= 3.0)
40
+ pg
41
+ rake
42
+ rspec (~> 2.0)
43
+ sinatra
@@ -1,10 +1 @@
1
- require 'spec/rake/spectask'
2
- Spec::Rake::SpecTask.new(:spec) do |spec|
3
- spec.libs << 'lib' << 'spec'
4
- spec.spec_files = FileList['spec/**/*_spec.rb']
5
- end
6
- task :default => :spec
7
-
8
- require 'rake/rdoctask'
9
-
10
- $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
1
+ THIS IS NOT A LOCKFILE
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: 39
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 4
9
- - 16
10
- version: 1.4.16
8
+ - 5
9
+ - 0
10
+ version: 1.5.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - EY Cloud Team
@@ -15,13 +15,13 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-27 00:00:00 -04:00
18
+ date: 2011-10-06 00:00:00 -07:00
19
19
  default_executable: engineyard-serverside
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
+ name: rspec
22
23
  prerelease: false
23
24
  type: :development
24
- name: rspec
25
25
  version_requirements: &id001 !ruby/object:Gem::Requirement
26
26
  none: false
27
27
  requirements:
@@ -35,9 +35,9 @@ dependencies:
35
35
  version: 1.3.2
36
36
  requirement: *id001
37
37
  - !ruby/object:Gem::Dependency
38
+ name: rake
38
39
  prerelease: false
39
40
  type: :development
40
- name: rake
41
41
  version_requirements: &id002 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
@@ -285,10 +285,14 @@ files:
285
285
  - spec/support/lockfiles/0.9-with-bundler
286
286
  - spec/support/lockfiles/1.0-no-bundler
287
287
  - spec/support/lockfiles/1.0.0.rc.1-with-bundler
288
+ - spec/support/lockfiles/1.0.18-do_mysql
289
+ - spec/support/lockfiles/1.0.18-do_postgres
290
+ - spec/support/lockfiles/1.0.18-mysql
291
+ - spec/support/lockfiles/1.0.18-mysql2
292
+ - spec/support/lockfiles/1.0.18-pg
288
293
  - spec/support/lockfiles/1.0.6-no-bundler
289
294
  - spec/support/lockfiles/1.0.6-with-any-bundler
290
295
  - spec/support/lockfiles/1.0.6-with-bundler
291
- - spec/support/lockfiles/evil-yaml
292
296
  - spec/support/lockfiles/not-a-lockfile
293
297
  has_rdoc: true
294
298
  homepage: http://github.com/engineyard/engineyard-serverside
@@ -320,7 +324,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
320
324
  requirements: []
321
325
 
322
326
  rubyforge_project:
323
- rubygems_version: 1.5.2
327
+ rubygems_version: 1.5.0
324
328
  signing_key:
325
329
  specification_version: 3
326
330
  summary: A gem that deploys ruby applications on EY Cloud instances
@@ -346,8 +350,12 @@ test_files:
346
350
  - spec/support/lockfiles/0.9-with-bundler
347
351
  - spec/support/lockfiles/1.0-no-bundler
348
352
  - spec/support/lockfiles/1.0.0.rc.1-with-bundler
353
+ - spec/support/lockfiles/1.0.18-do_mysql
354
+ - spec/support/lockfiles/1.0.18-do_postgres
355
+ - spec/support/lockfiles/1.0.18-mysql
356
+ - spec/support/lockfiles/1.0.18-mysql2
357
+ - spec/support/lockfiles/1.0.18-pg
349
358
  - spec/support/lockfiles/1.0.6-no-bundler
350
359
  - spec/support/lockfiles/1.0.6-with-any-bundler
351
360
  - spec/support/lockfiles/1.0.6-with-bundler
352
- - spec/support/lockfiles/evil-yaml
353
361
  - spec/support/lockfiles/not-a-lockfile
@@ -1,5 +0,0 @@
1
- ---
2
- x: |-
3
-
4
- x
5
- x