Class: Jets::RubyServer

Inherits:
Object
  • Object
show all
Defined in:
lib/jets/ruby_server.rb

Constant Summary collapse

PORT =
8080

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.runObject



96
97
98
# File 'lib/jets/ruby_server.rb', line 96

def self.run
  new.run
end

Instance Method Details

#prewarm_request(event) ⇒ Object



76
77
78
79
80
81
# File 'lib/jets/ruby_server.rb', line 76

def prewarm_request(event)
  # JSON.dump("prewarmed_at" => Time.now.to_s)
  Jets.increase_prewarm_count
  Jets.logger.info("Prewarm request")
  %Q|{"prewarmed_at":"#{Time.now.to_s}"}| # raw json for speed
end

#runObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/jets/ruby_server.rb', line 23

def run
  Jets.boot(stringio: true) # outside of child process for COW
  Jets.eager_load!

  # INT - ^C
  trap('INT') do
    puts "Shutting down ruby_server.rb..."
    sleep 0.1
    exit
  end
  if ENV['FOREGROUND'] # Usage above
    serve
    return
  end

  # Reaching here means we'll run the server in the background
  pid = Process.fork
  if pid.nil?
    serve
  else
    # parent process
    Process.detach(pid)
  end
end

#serveObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/jets/ruby_server.rb', line 48

def serve
  # child process
  server = TCPServer.new(8080) # Server bind to port 8080
  puts "Ruby server started on port #{PORT}" if ENV['FOREGROUND'] || ENV['JETS_DEBUG'] || ENV['C9_USER']

  loop do
    client = server.accept    # Wait for a client to connect

    input_completed, event, handler = nil, nil, nil
    unless input_completed
      event = client.gets.strip # text
      # puts event # uncomment for debugging, Jets has changed stdout to stderr
      handler = client.gets.strip # text
      # puts handler # uncomment for debugging, Jets has changed stdout to stderr
      input_completed = true
    end

    result = event['_prewarm'] ?
      prewarm_request(event) :
      standard_request(event, '{}', handler)

    Jets::IO.flush # flush output and write to disk for node shim

    client.puts(result)
    client.close
  end
end

#standard_request(event, context, handler) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/jets/ruby_server.rb', line 83

def standard_request(event, context, handler)
  Jets::Processors::MainProcessor.new(
    event,
    context,
    handler).run
rescue Exception => e
  JSON.dump(
    "stackTrace" => e.backtrace,
    "errorMessage" => e.message,
    "errorType" => "RubyError",
  )
end