Skip to content

Instantly share code, notes, and snippets.

@aaronjensen
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aaronjensen/9634174 to your computer and use it in GitHub Desktop.
Save aaronjensen/9634174 to your computer and use it in GitHub Desktop.
require 'thread'
class RackDrain
@@queue = Queue.new
def self.start_request
self.queue << :request
end
def self.end_request
self.queue.pop
end
def self.queue
@@queue
end
def self.drain
@block_requests = true
loop do
break if queue.empty?
sleep 0.01
end
ensure
@block_requests = false
end
def self.block_requests?
@block_requests
end
def initialize(app)
@app = app
end
def call(env)
RackDrain.start_request
return block_request if RackDrain.block_requests?
@app.call(env)
ensure
RackDrain.end_request
end
def block_request
[503, {}, []]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment