class ThriftRack
Constants
- THRIFT_HEADER
- VERSION
Attributes
redis[W]
Public Class Methods
app(servers = nil)
click to toggle source
# File lib/thrift_rack.rb, line 50 def app(servers = nil) Rack::Builder.new(ThriftRack.new(servers)) do use ThriftRack::LaunchTimestamp use ThriftRack::ActiveRecord if defined? ::ActiveRecord::Base # use(ActionDispatch::Executor, ::Rails.application.executor) if defined? ::Rails use ThriftRack::Downgrade use ThriftRack::Ping use ThriftRack::FormatCheck use ThriftRack::Atom use ThriftRack::Logger use ThriftRack::Sentry if defined? Raven use ThriftRack::ServerMetric end end
new(servers = nil)
click to toggle source
# File lib/thrift_rack.rb, line 22 def initialize(servers = nil) servers ||= ThriftRack::Server.children @maps = {} servers.each do |server| @maps[server.mount_path] = server end end
redis()
click to toggle source
# File lib/thrift_rack.rb, line 65 def redis @redis ||= Redis.new end
Public Instance Methods
call(env)
click to toggle source
# File lib/thrift_rack.rb, line 30 def call(env) req = Rack::Request.new(env) Thread.current["request"] = req server_class = @maps[req.path] return 400, { 'Content-Type' => 'text/plain' }, ["No Thrift Server For #{req.path}"] unless server_class resp = Rack::Response.new([], 200, { 'Content-Type' => THRIFT_HEADER }) transport = Thrift::IOStreamTransport.new req.body, resp protocol = server_class.protocol_factory.get_protocol transport server_class.processor_class.new(server_class.new(req)).process(protocol, protocol) resp_a = resp.to_a [resp_a[0], resp_a[1], [resp_a[2].join]] ensure Thread.current["request"] = nil end