require 'webrick' require 'json' require 'net/http' require 'uri' require 'rubygems' require 'bundler' require_relative '__NOW_HANDLER_FILE' module NowHandler thread = Thread.new do server = WEBrick::HTTPServer.new :Port => 3000 if Object.const_defined?('Handler') puts 'Handler called' server.mount '/', Handler end trap('INT') { server.stop } server.start end def self.now_handler(event:, context:) # thread.join puts "event: #{event} and context: #{context}" payload = JSON.parse event['body'] path = payload['path'] headers = payload['headers'] http_method = payload['method'] uri = URI("http://0.0.0.0:3000#{path}") res = Net::HTTP.start uri.host, uri.port do |http| req = Kernel.const_get("Net::HTTP::#{http_method.capitalize}").new(uri) headers.each {|k,v| req[k] = v} http.request req end { statusCode: res.code, headers: res.each_capitalized, body: res.body } end end # $:.unshift *Dir["./vendor/bundle/ruby/2.5.0/gems/**/lib"] # require 'rubygems' # require 'bundler' # Bundler.setup # require 'rack' # require 'json' # begin # $app ||= Rack::Builder.parse_file("#{__dir__}/app/config.ru").first # rescue Exception => e # pp e # end # def handler(event:, context:) # body = event['body'] # querystring = Rack::Utils.build_query(event['queryStringParameters']) if event['queryStringParameters'] # pp event # puts "event: #{event} and context: #{context}" # env = { # 'REQUEST_METHOD' => event['httpMethod'], # 'SCRIPT_NAME' => '', # 'PATH_INFO' => event['path'] || '', # 'QUERY_STRING' => querystring || '', # 'SERVER_NAME' => 'localhost', # 'SERVER_PORT' => 3000, # 'CONTENT_TYPE' => event['headers']['content-type'], # 'rack.version' => Rack::VERSION, # 'rack.url_scheme' => 'http', # 'rack.input' => StringIO.new(body || ''), # 'rack.errors' => $stderr, # } # # Pass request headers to Rack if they are available # unless event['headers'].nil? # event['headers'].each { |key, value| env["HTTP_#{key}"] = value } # end # begin # status, headers, body = $app.call(env) # body_content = body.map(&:to_s).join(',') # response = { # 'statusCode' => status, # 'headers' => headers, # 'body' => body_content # } # rescue Exception => msg # # If there is any exception, we return a 500 error with an error message # response = { # 'statusCode' => 500, # 'body' => msg # } # end # response.to_json # end