engineyard-serverside 1.5.23.ruby19.16 → 1.5.24

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.
Files changed (181) hide show
  1. data/lib/engineyard-serverside.rb +19 -17
  2. data/lib/engineyard-serverside/cli.rb +38 -30
  3. data/lib/engineyard-serverside/configuration.rb +4 -28
  4. data/lib/engineyard-serverside/deploy.rb +10 -7
  5. data/lib/engineyard-serverside/lockfile_parser.rb +2 -2
  6. data/lib/engineyard-serverside/logged_output.rb +2 -0
  7. data/lib/engineyard-serverside/server.rb +2 -27
  8. data/lib/engineyard-serverside/task.rb +14 -10
  9. data/lib/engineyard-serverside/version.rb +1 -1
  10. data/lib/vendor/dataflow/HISTORY +52 -0
  11. data/lib/vendor/dataflow/LICENSE +19 -0
  12. data/lib/vendor/dataflow/README.textile +290 -0
  13. data/lib/vendor/dataflow/Rakefile +36 -0
  14. data/lib/vendor/dataflow/examples/barrier.rb +9 -0
  15. data/lib/vendor/dataflow/examples/data_driven.rb +17 -0
  16. data/lib/vendor/dataflow/examples/dataflow_http_gets.rb +13 -0
  17. data/lib/vendor/dataflow/examples/flow.rb +20 -0
  18. data/lib/vendor/dataflow/examples/future_http_gets.rb +12 -0
  19. data/lib/vendor/dataflow/examples/future_queue.rb +11 -0
  20. data/lib/vendor/dataflow/examples/instance_variables.rb +15 -0
  21. data/lib/vendor/dataflow/examples/laziness.rb +9 -0
  22. data/lib/vendor/dataflow/examples/local_variables.rb +11 -0
  23. data/lib/vendor/dataflow/examples/messages.rb +26 -0
  24. data/lib/vendor/dataflow/examples/port_http_gets.rb +13 -0
  25. data/lib/vendor/dataflow/examples/port_send.rb +10 -0
  26. data/lib/vendor/dataflow/examples/ring.rb +21 -0
  27. data/lib/vendor/dataflow/spec/actor_spec.rb +28 -0
  28. data/lib/vendor/dataflow/spec/anonymous_variables_spec.rb +21 -0
  29. data/lib/vendor/dataflow/spec/barrier_spec.rb +25 -0
  30. data/lib/vendor/dataflow/spec/by_need_spec.rb +55 -0
  31. data/lib/vendor/dataflow/spec/dataflow_spec.rb +151 -0
  32. data/lib/vendor/dataflow/spec/equality_spec.rb +40 -0
  33. data/lib/vendor/dataflow/spec/flow_spec.rb +25 -0
  34. data/lib/vendor/dataflow/spec/forker_spec.rb +28 -0
  35. data/lib/vendor/dataflow/spec/future_queue_spec.rb +31 -0
  36. data/lib/vendor/dataflow/spec/inspect_spec.rb +19 -0
  37. data/lib/vendor/dataflow/spec/need_later_spec.rb +12 -0
  38. data/lib/vendor/dataflow/spec/port_spec.rb +26 -0
  39. data/lib/vendor/dataflow/spec/spec.opts +1 -0
  40. data/lib/vendor/dataflow/spec/spec_helper.rb +10 -0
  41. data/lib/vendor/escape/Readme +21 -0
  42. data/lib/vendor/escape/doc_include/template/qualitysmith.rb +631 -0
  43. data/lib/vendor/json_pure/CHANGES +166 -0
  44. data/lib/vendor/json_pure/COPYING +58 -0
  45. data/lib/vendor/json_pure/GPL +340 -0
  46. data/lib/vendor/json_pure/README +358 -0
  47. data/lib/vendor/json_pure/Rakefile +292 -0
  48. data/lib/vendor/json_pure/TODO +1 -0
  49. data/lib/vendor/json_pure/VERSION +1 -0
  50. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log +52 -0
  51. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat +1000 -0
  52. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat +1001 -0
  53. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat +900 -0
  54. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat +901 -0
  55. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat +1000 -0
  56. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat +1001 -0
  57. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log +261 -0
  58. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat +1000 -0
  59. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat +1001 -0
  60. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat +1000 -0
  61. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat +1001 -0
  62. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat +1000 -0
  63. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat +1001 -0
  64. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log +262 -0
  65. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat +1000 -0
  66. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat +1001 -0
  67. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log +82 -0
  68. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log +34 -0
  69. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat +900 -0
  70. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat +901 -0
  71. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log +81 -0
  72. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat +1000 -0
  73. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat +1001 -0
  74. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log +82 -0
  75. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat +1000 -0
  76. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat +1001 -0
  77. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log +82 -0
  78. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat +1000 -0
  79. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat +1001 -0
  80. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log +82 -0
  81. data/lib/vendor/json_pure/benchmarks/generator2_benchmark.rb +222 -0
  82. data/lib/vendor/json_pure/benchmarks/generator_benchmark.rb +224 -0
  83. data/lib/vendor/json_pure/benchmarks/ohai.json +1216 -0
  84. data/lib/vendor/json_pure/benchmarks/ohai.ruby +1 -0
  85. data/lib/vendor/json_pure/benchmarks/parser2_benchmark.rb +251 -0
  86. data/lib/vendor/json_pure/benchmarks/parser_benchmark.rb +259 -0
  87. data/lib/vendor/json_pure/bin/edit_json.rb +9 -0
  88. data/lib/vendor/json_pure/bin/prettify_json.rb +75 -0
  89. data/lib/vendor/json_pure/data/example.json +1 -0
  90. data/lib/vendor/json_pure/data/index.html +38 -0
  91. data/lib/vendor/json_pure/data/prototype.js +4184 -0
  92. data/lib/vendor/json_pure/ext/json/ext/generator/extconf.rb +16 -0
  93. data/lib/vendor/json_pure/ext/json/ext/generator/generator.c +1323 -0
  94. data/lib/vendor/json_pure/ext/json/ext/generator/generator.h +170 -0
  95. data/lib/vendor/json_pure/ext/json/ext/parser/extconf.rb +15 -0
  96. data/lib/vendor/json_pure/ext/json/ext/parser/parser.c +1935 -0
  97. data/lib/vendor/json_pure/ext/json/ext/parser/parser.h +71 -0
  98. data/lib/vendor/json_pure/ext/json/ext/parser/parser.rl +792 -0
  99. data/lib/vendor/json_pure/install.rb +26 -0
  100. data/lib/vendor/json_pure/tests/fixtures/fail1.json +1 -0
  101. data/lib/vendor/json_pure/tests/fixtures/fail10.json +1 -0
  102. data/lib/vendor/json_pure/tests/fixtures/fail11.json +1 -0
  103. data/lib/vendor/json_pure/tests/fixtures/fail12.json +1 -0
  104. data/lib/vendor/json_pure/tests/fixtures/fail13.json +1 -0
  105. data/lib/vendor/json_pure/tests/fixtures/fail14.json +1 -0
  106. data/lib/vendor/json_pure/tests/fixtures/fail18.json +1 -0
  107. data/lib/vendor/json_pure/tests/fixtures/fail19.json +1 -0
  108. data/lib/vendor/json_pure/tests/fixtures/fail2.json +1 -0
  109. data/lib/vendor/json_pure/tests/fixtures/fail20.json +1 -0
  110. data/lib/vendor/json_pure/tests/fixtures/fail21.json +1 -0
  111. data/lib/vendor/json_pure/tests/fixtures/fail22.json +1 -0
  112. data/lib/vendor/json_pure/tests/fixtures/fail23.json +1 -0
  113. data/lib/vendor/json_pure/tests/fixtures/fail24.json +1 -0
  114. data/lib/vendor/json_pure/tests/fixtures/fail25.json +1 -0
  115. data/lib/vendor/json_pure/tests/fixtures/fail27.json +2 -0
  116. data/lib/vendor/json_pure/tests/fixtures/fail28.json +2 -0
  117. data/lib/vendor/json_pure/tests/fixtures/fail3.json +1 -0
  118. data/lib/vendor/json_pure/tests/fixtures/fail4.json +1 -0
  119. data/lib/vendor/json_pure/tests/fixtures/fail5.json +1 -0
  120. data/lib/vendor/json_pure/tests/fixtures/fail6.json +1 -0
  121. data/lib/vendor/json_pure/tests/fixtures/fail7.json +1 -0
  122. data/lib/vendor/json_pure/tests/fixtures/fail8.json +1 -0
  123. data/lib/vendor/json_pure/tests/fixtures/fail9.json +1 -0
  124. data/lib/vendor/json_pure/tests/fixtures/pass1.json +56 -0
  125. data/lib/vendor/json_pure/tests/fixtures/pass15.json +1 -0
  126. data/lib/vendor/json_pure/tests/fixtures/pass16.json +1 -0
  127. data/lib/vendor/json_pure/tests/fixtures/pass17.json +1 -0
  128. data/lib/vendor/json_pure/tests/fixtures/pass2.json +1 -0
  129. data/lib/vendor/json_pure/tests/fixtures/pass26.json +1 -0
  130. data/lib/vendor/json_pure/tests/fixtures/pass3.json +6 -0
  131. data/lib/vendor/json_pure/tests/test_json.rb +361 -0
  132. data/lib/vendor/json_pure/tests/test_json_addition.rb +162 -0
  133. data/lib/vendor/json_pure/tests/test_json_encoding.rb +68 -0
  134. data/lib/vendor/json_pure/tests/test_json_fixtures.rb +34 -0
  135. data/lib/vendor/json_pure/tests/test_json_generate.rb +122 -0
  136. data/lib/vendor/json_pure/tests/test_json_rails.rb +144 -0
  137. data/lib/vendor/json_pure/tests/test_json_unicode.rb +76 -0
  138. data/lib/vendor/json_pure/tools/fuzz.rb +139 -0
  139. data/lib/vendor/json_pure/tools/server.rb +61 -0
  140. data/lib/vendor/open4/lib/open4.rb +51 -80
  141. data/lib/vendor/thor/CHANGELOG.rdoc +89 -0
  142. data/lib/vendor/thor/LICENSE +20 -0
  143. data/lib/vendor/thor/README.rdoc +297 -0
  144. data/lib/vendor/thor/Thorfile +69 -0
  145. data/lib/vendor/thor/bin/rake2thor +86 -0
  146. data/lib/vendor/thor/bin/thor +6 -0
  147. data/lib/vendor/thor/thor.gemspec +120 -0
  148. data/spec/basic_deploy_spec.rb +1 -1
  149. data/spec/bundler_deploy_spec.rb +1 -1
  150. data/spec/nodejs_deploy_spec.rb +5 -2
  151. data/spec/rails31_deploy_spec.rb +3 -3
  152. data/spec/services_deploy_spec.rb +1 -1
  153. data/spec/support/integration.rb +1 -2
  154. metadata +165 -44
  155. data/lib/engineyard-serverside/future.rb +0 -29
  156. data/lib/engineyard-serverside/futures/celluloid.rb +0 -25
  157. data/lib/engineyard-serverside/futures/dataflow.rb +0 -31
  158. data/lib/vendor/celluloid/lib/celluloid.rb +0 -261
  159. data/lib/vendor/celluloid/lib/celluloid/actor.rb +0 -242
  160. data/lib/vendor/celluloid/lib/celluloid/actor_pool.rb +0 -54
  161. data/lib/vendor/celluloid/lib/celluloid/actor_proxy.rb +0 -75
  162. data/lib/vendor/celluloid/lib/celluloid/application.rb +0 -78
  163. data/lib/vendor/celluloid/lib/celluloid/calls.rb +0 -94
  164. data/lib/vendor/celluloid/lib/celluloid/core_ext.rb +0 -14
  165. data/lib/vendor/celluloid/lib/celluloid/events.rb +0 -14
  166. data/lib/vendor/celluloid/lib/celluloid/fiber.rb +0 -33
  167. data/lib/vendor/celluloid/lib/celluloid/fsm.rb +0 -141
  168. data/lib/vendor/celluloid/lib/celluloid/future.rb +0 -60
  169. data/lib/vendor/celluloid/lib/celluloid/links.rb +0 -61
  170. data/lib/vendor/celluloid/lib/celluloid/logger.rb +0 -32
  171. data/lib/vendor/celluloid/lib/celluloid/mailbox.rb +0 -124
  172. data/lib/vendor/celluloid/lib/celluloid/receivers.rb +0 -66
  173. data/lib/vendor/celluloid/lib/celluloid/registry.rb +0 -33
  174. data/lib/vendor/celluloid/lib/celluloid/responses.rb +0 -26
  175. data/lib/vendor/celluloid/lib/celluloid/rspec.rb +0 -2
  176. data/lib/vendor/celluloid/lib/celluloid/signals.rb +0 -50
  177. data/lib/vendor/celluloid/lib/celluloid/supervisor.rb +0 -57
  178. data/lib/vendor/celluloid/lib/celluloid/task.rb +0 -73
  179. data/lib/vendor/celluloid/lib/celluloid/tcp_server.rb +0 -33
  180. data/lib/vendor/celluloid/lib/celluloid/timers.rb +0 -109
  181. data/lib/vendor/celluloid/lib/celluloid/version.rb +0 -4
@@ -1,15 +1,21 @@
1
- # encoding: utf-8
1
+ if String.instance_methods.include?(:force_encoding)
2
+ $string_encodings = true
3
+ else
4
+ # KCODE is gone in 1.9-like implementations, but we
5
+ # still need to set it for 1.8.
6
+ $KCODE = 'U'
7
+ $string_encodings = false
8
+ end
2
9
 
10
+ $LOAD_PATH.unshift File.expand_path('vendor/thor/lib', File.dirname(__FILE__))
11
+ $LOAD_PATH.unshift File.expand_path('vendor/open4/lib', File.dirname(__FILE__))
3
12
  $LOAD_PATH.unshift File.expand_path('vendor/escape/lib', File.dirname(__FILE__))
4
13
  $LOAD_PATH.unshift File.expand_path('vendor/json_pure/lib', File.dirname(__FILE__))
5
- $LOAD_PATH.unshift File.expand_path('vendor/open4/lib', File.dirname(__FILE__))
6
- $LOAD_PATH.unshift File.expand_path('vendor/thor/lib', File.dirname(__FILE__))
14
+ $LOAD_PATH.unshift File.expand_path('vendor/dataflow', File.dirname(__FILE__))
7
15
 
8
16
  require 'escape'
9
17
  require 'json'
10
- require 'tmpdir'
11
- require 'thor'
12
- require 'open4'
18
+ require 'dataflow'
13
19
 
14
20
  require 'engineyard-serverside/version'
15
21
  require 'engineyard-serverside/strategies/git'
@@ -21,7 +27,6 @@ require 'engineyard-serverside/lockfile_parser'
21
27
  require 'engineyard-serverside/cli'
22
28
  require 'engineyard-serverside/configuration'
23
29
  require 'engineyard-serverside/deprecation'
24
- require 'engineyard-serverside/future'
25
30
 
26
31
  module EY
27
32
  module Serverside
@@ -55,16 +60,13 @@ module EY
55
60
  end
56
61
 
57
62
  def self.read_encoded_dna
58
- encoded_dna = '{}'
59
- force_unicode = encoded_dna.respond_to?(:force_encoding)
60
- $KCODE = 'U' unless force_unicode
61
-
62
- if File.exist?(dna_path)
63
- encoded_dna = `sudo cat #{dna_path}`
64
- encoded_dna.force_encoding('UTF-8') if force_unicode
65
- end
66
-
67
- encoded_dna
63
+ json = if File.exist?(dna_path)
64
+ `sudo cat #{dna_path}`
65
+ else
66
+ '{}'
67
+ end
68
+ json.force_encoding('UTF-8') if $string_encodings
69
+ json
68
70
  end
69
71
  end
70
72
  end
@@ -1,8 +1,16 @@
1
+ require 'thor'
1
2
  require 'pathname'
2
3
 
3
4
  module EY
4
5
  module Serverside
5
6
  class CLI < Thor
7
+ include Dataflow
8
+
9
+ def self.start(*)
10
+ super
11
+ rescue RemoteFailure
12
+ exit(1)
13
+ end
6
14
 
7
15
  method_option :migrate, :type => :string,
8
16
  :desc => "Run migrations with this deploy",
@@ -48,14 +56,14 @@ module EY
48
56
  :aliases => ["-v"]
49
57
 
50
58
  desc "deploy", "Deploy code from /data/<app>"
51
- def deploy(default_task = :deploy)
59
+ def deploy(default_task=:deploy)
52
60
  config = EY::Serverside::Deploy::Configuration.new(options)
53
61
  EY::Serverside::Server.load_all_from_array(assemble_instance_hashes(config))
54
62
 
55
63
  EY::Serverside::LoggedOutput.verbose = options[:verbose]
56
64
  EY::Serverside::LoggedOutput.logfile = File.join(ENV['HOME'], "#{options[:app]}-deploy.log")
57
65
 
58
- propagate
66
+ invoke :propagate
59
67
 
60
68
  EY::Serverside::Deploy.new(config).send(default_task)
61
69
  end
@@ -136,7 +144,7 @@ module EY
136
144
 
137
145
  EY::Serverside::Server.load_all_from_array(assemble_instance_hashes(config))
138
146
 
139
- propagate
147
+ invoke :propagate
140
148
 
141
149
  EY::Serverside::Server.all.each do |server|
142
150
  server.sync_directory app_dir
@@ -182,7 +190,7 @@ module EY
182
190
  config = EY::Serverside::Deploy::Configuration.new(options)
183
191
  EY::Serverside::Server.load_all_from_array(assemble_instance_hashes(config))
184
192
 
185
- propagate
193
+ invoke :propagate
186
194
 
187
195
  EY::Serverside::Deploy.new(config).restart_with_maintenance_page
188
196
  end
@@ -204,22 +212,34 @@ module EY
204
212
 
205
213
  desc "propagate", "Propagate the engineyard-serverside gem to the other instances in the cluster. This will install exactly version #{EY::Serverside::VERSION}."
206
214
  def propagate
207
- ey_server_side = Dependency.new('engineyard-serverside', EY::Serverside::VERSION)
208
- servers = EY::Serverside::Server.all.find_all { |server| !server.local? }
209
-
210
- futures = EY::Serverside::Future.call(servers) do |server|
211
- installed = server.gem?(ey_server_side.name, ey_server_side.version)
212
- unless installed
213
- unless server.gem?(ey_server_side.name, ey_server_side.version)
214
- puts "~> Installing #{ey_server_side.name} on #{server.hostname}"
215
- server.copy(ey_server_side.local_path, ey_server_side.remote_path)
216
- installed = server.install_gem(ey_server_side.remote_path)
215
+ config = EY::Serverside::Deploy::Configuration.new
216
+ gem_filename = "engineyard-serverside-#{EY::Serverside::VERSION}.gem"
217
+ local_gem_file = File.join(Gem.dir, 'cache', gem_filename)
218
+ remote_gem_file = File.join(Dir.tmpdir, gem_filename)
219
+ gem_binary = File.join(Gem.default_bindir, 'gem')
220
+
221
+ barrier(*(EY::Serverside::Server.all.find_all do |server|
222
+ !server.local? # of course this machine has it
223
+ end.map do |server|
224
+ need_later do
225
+ egrep_escaped_version = EY::Serverside::VERSION.gsub(/\./, '\.')
226
+ # the [,)] is to stop us from looking for e.g. 0.5.1, seeing
227
+ # 0.5.11, and mistakenly thinking 0.5.1 is there
228
+ has_gem_cmd = "#{gem_binary} list engineyard-serverside | grep \"engineyard-serverside\" | egrep -q '#{egrep_escaped_version}[,)]'"
229
+
230
+ if !server.run(has_gem_cmd) # doesn't have this exact version
231
+ puts "~> Installing engineyard-serverside on #{server.hostname}"
232
+
233
+ system(Escape.shell_command([
234
+ 'scp', '-i', "#{ENV['HOME']}/.ssh/internal",
235
+ "-o", "StrictHostKeyChecking=no",
236
+ local_gem_file,
237
+ "#{config.user}@#{server.hostname}:#{remote_gem_file}",
238
+ ]))
239
+ server.run("sudo #{gem_binary} install --no-rdoc --no-ri '#{remote_gem_file}'")
217
240
  end
218
241
  end
219
- installed
220
- end
221
-
222
- EY::Serverside::Future.success?(futures)
242
+ end))
223
243
  end
224
244
 
225
245
  private
@@ -233,18 +253,6 @@ module EY
233
253
  }
234
254
  }
235
255
  end
236
-
237
- class Dependency
238
- attr_reader :name, :version
239
- def initialize(name, version)
240
- @name = name
241
- @version = version
242
- end
243
-
244
- def gemname; "#{name}-#{version}.gem"; end
245
- def local_path; File.expand_path(File.join('cache', gemname), Gem.dir); end
246
- def remote_path; File.expand_path(gemname, Dir.tmpdir); end
247
- end
248
256
  end
249
257
  end
250
258
  end
@@ -1,37 +1,13 @@
1
+ require 'json'
2
+ require 'thor'
1
3
 
2
4
  module EY
3
5
  module Serverside
4
- # Really simple and hacked implementation that works for the 99.9999% of the cases
5
- class HashWithIndifferentAccess
6
- def initialize(hash = {})
7
- @internal = {}
8
- hash.each do |k, v|
9
- @internal[k.to_s] = v
10
- end
11
- end
12
- def [](name)
13
- @internal[name.to_s]
14
- end
15
- def []=(name, value)
16
- @internal[name.to_s] = value
17
- end
18
-
19
- def method_missing(method, *args, &block)
20
- if @internal.key?(method.to_s)
21
- @internal[method.to_s]
22
- else
23
- @internal.send(method, args, &block)
24
- end
25
- end
26
- end
27
-
28
6
  class Deploy::Configuration
29
- require 'json'
30
-
31
7
  DEFAULT_CONFIG = Thor::CoreExt::HashWithIndifferentAccess.new({
32
8
  "branch" => "master",
33
9
  "strategy" => "Git",
34
- "bundle_without" => "test development"
10
+ "bundle_without" => "test development",
35
11
  })
36
12
 
37
13
  attr_reader :configuration
@@ -88,7 +64,7 @@ module EY
88
64
  end
89
65
 
90
66
  def repository_cache
91
- configuration['repository_cache'] || File.join(deploy_to, "/shared/cached-copy")
67
+ configuration['repository_cache'] || File.join(deploy_to, 'shared', 'cached-copy')
92
68
  end
93
69
 
94
70
  def deploy_to
@@ -145,10 +145,9 @@ To fix this problem, commit your Gemfile.lock to your repository and redeploy.
145
145
  # task
146
146
  def push_code
147
147
  info "~> Pushing code to all servers"
148
- futures = EY::Serverside::Future.call(EY::Serverside::Server.all) do |server|
149
- server.sync_directory(config.repository_cache)
150
- end
151
- EY::Serverside::Future.success?(futures)
148
+ barrier *(EY::Serverside::Server.all.map do |server|
149
+ need_later { server.sync_directory(config.repository_cache) }
150
+ end)
152
151
  end
153
152
 
154
153
  # task
@@ -263,7 +262,7 @@ WRAP
263
262
  # task
264
263
  def copy_repository_cache
265
264
  info "~> Copying to #{c.release_path}"
266
- run("mkdir -p #{c.release_path} && rsync -aq #{c.exclusions} #{c.repository_cache}/ #{c.release_path}")
265
+ run("mkdir -p #{c.release_path} #{c.failed_release_dir} && rsync -aq #{c.exclusions} #{c.repository_cache}/ #{c.release_path}")
267
266
 
268
267
  info "~> Ensuring proper ownership."
269
268
  sudo("chown -R #{c.user}:#{c.group} #{c.deploy_to}")
@@ -281,6 +280,10 @@ WRAP
281
280
  "/usr/local/ey_resin/ruby/bin/ey-services-setup #{config.app}"
282
281
  end
283
282
 
283
+ def node_package_manager_command_check
284
+ "which npm"
285
+ end
286
+
284
287
  def setup_services
285
288
  info "~> Setting up external services."
286
289
  begin
@@ -400,7 +403,7 @@ Deploy again if your services configuration appears incomplete or out of date.
400
403
  yield
401
404
  rescue Exception
402
405
  info "~> Release #{c.release_path} failed, saving release to #{c.failed_release_dir}."
403
- sudo "mkdir -p #{c.failed_release_dir} && mv #{c.release_path} #{c.failed_release_dir}"
406
+ sudo "mv #{c.release_path} #{c.failed_release_dir}"
404
407
  raise
405
408
  end
406
409
 
@@ -463,7 +466,7 @@ Deploy again if your services configuration appears incomplete or out of date.
463
466
 
464
467
  def check_node_npm
465
468
  if File.exist?("#{c.release_path}/package.json")
466
- unless run("which npm")
469
+ unless run(node_package_manager_command_check)
467
470
  abort "*** [Error] package.json detected, but npm was not installed"
468
471
  else
469
472
  info "~> package.json detected, installing npm packages"
@@ -16,11 +16,11 @@ module EY
16
16
  end
17
17
 
18
18
  def any_database_adapter?
19
- any_ruby_adapter = %w[mysql2 mysql do_mysql pg do_postgres sqlite3].any? do |type|
19
+ any_ruby_adapter = %w[mysql2 mysql do_mysql pg do_postgres].any? do |type|
20
20
  @contents.index(/^\s+#{type}\s\([^\)]+\)$/)
21
21
  end
22
22
 
23
- any_jruby_adapter = %w[mysql postgresql sqlite3].any? do |type|
23
+ any_jruby_adapter = %w[mysql postgresql].any? do |type|
24
24
  @contents.index(/^\s+jdbc-#{type}\s\([^\)]+\)$/) || @contents.index(/^\s+activerecord-jdbc#{type}-adapter\s\([^\)]+\)$/)
25
25
  end
26
26
 
@@ -1,3 +1,5 @@
1
+ require 'open4'
2
+
1
3
  module EY
2
4
  module Serverside
3
5
  module LoggedOutput
@@ -83,37 +83,12 @@ module EY
83
83
  if local?
84
84
  logged_system(command)
85
85
  else
86
- logged_system(ssh_command + Escape.shell_command(["#{user}@#{hostname}", command]))
86
+ logged_system(ssh_command + " " + Escape.shell_command(["#{user}@#{hostname}", command]))
87
87
  end
88
88
  end
89
89
 
90
- def copy(local_file, remote_file)
91
- logged_system(scp_command + Escape.shell_command([local_file, "#{user}@#{hostname}:#{remote_file}"]))
92
- end
93
-
94
90
  def ssh_command
95
- "ssh #{ssh_options} "
96
- end
97
-
98
- def scp_command
99
- "scp #{ssh_options} "
100
- end
101
-
102
- def ssh_options
103
- "-i #{ENV['HOME']}/.ssh/internal -o StrictHostKeyChecking=no -o PasswordAuthentication=no"
104
- end
105
-
106
- def gem?(name, version)
107
- run("#{gem_command} list -i #{name} -v '#{version}'")
108
- end
109
-
110
- def install_gem(path)
111
- # resin + ruby 1.8.6 need sudo privileges to install gems
112
- run("sudo #{gem_command} install -q --no-ri --no-rdoc #{path}")
113
- end
114
-
115
- def gem_command
116
- File.expand_path('gem', Gem.default_bindir)
91
+ "ssh -i #{ENV['HOME']}/.ssh/internal -o StrictHostKeyChecking=no -o PasswordAuthentication=no"
117
92
  end
118
93
 
119
94
  end
@@ -1,6 +1,7 @@
1
1
  module EY
2
2
  module Serverside
3
3
  class Task
4
+ include Dataflow
4
5
 
5
6
  attr_reader :config
6
7
  alias :c :config
@@ -37,6 +38,9 @@ module EY
37
38
  end
38
39
  end
39
40
 
41
+ # Returns +true+ if the command is successful,
42
+ # raises EY::Serverside::RemoteFailure with a list of failures
43
+ # otherwise.
40
44
  def run(cmd, &blk)
41
45
  run_on_roles(cmd, &blk)
42
46
  end
@@ -47,18 +51,18 @@ module EY
47
51
 
48
52
  private
49
53
 
50
- def run_on_roles(cmd, wrapper=%w[sh -l -c], &block)
51
- servers = EY::Serverside::Server.from_roles(@roles)
52
- futures = EY::Serverside::Future.call(servers, block_given?) do |server, exec_block|
53
- to_run = exec_block ? block.call(server, cmd.dup) : cmd
54
- server.run(Escape.shell_command(wrapper + [to_run]))
55
- end
56
-
57
- unless EY::Serverside::Future.success?(futures)
58
- failures = futures.select {|f| f.error? }.map {|f| f.inspect}.join("\n")
59
- raise EY::Serverside::RemoteFailure.new(failures)
54
+ def run_on_roles(cmd, wrapper=%w[sh -l -c])
55
+ results = EY::Serverside::Server.from_roles(@roles).map do |server|
56
+ to_run = block_given? ? yield(server, cmd.dup) : cmd
57
+ need_later { server.run(Escape.shell_command(wrapper + [to_run])) }
60
58
  end
59
+ barrier *results
60
+ # MRI's truthiness check is an internal C thing that does not call
61
+ # any methods... so Dataflow cannot proxy it & we must "x == true"
62
+ # Rubinius, wherefore art thou!?
63
+ results.all?{|x| x == true } || raise(EY::Serverside::RemoteFailure.new(cmd))
61
64
  end
65
+
62
66
  end
63
67
  end
64
68
  end
@@ -1,5 +1,5 @@
1
1
  module EY
2
2
  module Serverside
3
- VERSION = '1.5.23.ruby19.16'
3
+ VERSION = '1.5.24'
4
4
  end
5
5
  end
@@ -0,0 +1,52 @@
1
+ == 0.3.0 / 2009-08-29
2
+
3
+ * Major enhancements
4
+
5
+ * "flow" abstraction for threading (use it to create threads and optionally
6
+ pass it a variable to be bound output, or override it to modify need_later
7
+ for other threading strategies such as thread pools)
8
+
9
+ * Dataflow::FutureQueue
10
+
11
+ * Nested binding through variables possible
12
+
13
+ * Minor enhancements
14
+
15
+ * Better #inspect and UnificationError debugging output
16
+
17
+ * "barrier" abstraction for manually preventing execution until variable
18
+ arguments have been bound
19
+
20
+ * Use mixin methods as class/module methods optionally
21
+ e.g. Dataflow.local {|v| v }
22
+
23
+ == 0.2.1 / 2009-07-29
24
+
25
+ * Minor enhancements
26
+
27
+ * Leave __send__ and __id__ alone when acting as a proxy
28
+
29
+ == 0.2.0 / 2009-07-09
30
+
31
+ * Major enhancements
32
+
33
+ * Made equality between objects and dataflow variables more transparent
34
+ (load equality changes with: require 'dataflow/equality')
35
+
36
+ * Minor enhancements
37
+
38
+ * Made #inspect work with unbound variables to not crash deubggers/repls/etc
39
+
40
+ * Made relationship between lazy and dataflow behavior more strict
41
+
42
+ == 0.1.1 / 2009-06-13
43
+
44
+ * Minor enhancements
45
+
46
+ * Got the "require_path" set correctly so rubygems can be used =)
47
+
48
+ == 0.1.0 / 2009-06-13
49
+
50
+ * 1 major enhancement
51
+
52
+ * Birthday!