Class: RackDirect::Service
- Inherits:
-
Object
- Object
- RackDirect::Service
- Defined in:
- lib/rack_direct/service.rb
Constant Summary collapse
- @@services =
{}
Class Attribute Summary collapse
-
.verbose_logging ⇒ Object
Returns the value of attribute verbose_logging.
Class Method Summary collapse
- .log(name, msg) ⇒ Object
- .send_request(name, rack_request_env) ⇒ Object
- .start(path, options = {}) ⇒ Object
- .stop(name) ⇒ Object
Class Attribute Details
.verbose_logging ⇒ Object
Returns the value of attribute verbose_logging.
13 14 15 |
# File 'lib/rack_direct/service.rb', line 13 def verbose_logging @verbose_logging end |
Class Method Details
.log(name, msg) ⇒ Object
16 17 18 19 20 21 |
# File 'lib/rack_direct/service.rb', line 16 def self.log name, msg if self.verbose_logging msg = msg.gsub(/^/, "#{name}> ") puts msg end end |
.send_request(name, rack_request_env) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/rack_direct/service.rb', line 51 def self.send_request name, rack_request_env if @@services[name] rack_request_env["direct_request.unique_id"] = Guid.new.to_s @@services[name].puts rack_request_env.to_json @@services[name].puts "" response = "" in_response = false while true line = @@services[name].gets if line.strip == "BEGIN #{rack_request_env["direct_request.unique_id"]}" in_response = true next elsif line.strip == "END #{rack_request_env["direct_request.unique_id"]}" break elsif in_response response += line else self.log name, "#{line.strip}" end end # self.log name, "Final response: #{response}" response end end |
.start(path, options = {}) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/rack_direct/service.rb', line 24 def self.start path, = {} name = [:name] || File.split(path).last unless @@services[name] tmppath = generate_rackup_file name, [:env] # TODO: check path to make sure a Rails app exists there self.log name, "starting service via rack_direct..." # TODO: remove this hack to force an old version of rack when loading an older Rails project rackup_path = Gem.bin_path "rack", "rackup", "< 1.1" cmd = "cd #{path} && rake db:test:prepare && #{rackup_path} --server #{RACK_DIRECT_ALIAS} #{tmppath} 2>&1 | tee output" self.log name, cmd @@services[name] = IO.popen cmd, "w+" self.log name, "service started" at_exit do RackDirect::Service.stop name File.unlink tmppath end end "rack-direct://#{name}" end |
.stop(name) ⇒ Object
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/rack_direct/service.rb', line 81 def self.stop name if @@services[name] self.log name, "stopping service..." @@services[name].puts "EXIT" @@services[name].puts "" @@services[name] = nil Process.waitall self.log name, "service stopped." end end |