alebsack/rack-fiber_pool

View on GitHub
README.md

Summary

Maintainability
Test Coverage
rack-fiber_pool
===============
[![Dependency Status](https://gemnasium.com/alebsack/rack-fiber_pool.png)](https://gemnasium.com/alebsack/rack-fiber_pool) [![Coverage Status](https://coveralls.io/repos/alebsack/rack-fiber_pool/badge.png)](https://coveralls.io/r/alebsack/rack-fiber_pool) [![Build Status](https://travis-ci.org/alebsack/rack-fiber_pool.png?branch=master)](https://travis-ci.org/alebsack/rack-fiber_pool) [![Code Climate](https://codeclimate.com/github/alebsack/rack-fiber_pool.png)](https://codeclimate.com/github/alebsack/rack-fiber_pool)

A Rack middleware component which runs each request in a Fiber from a pool of Fibers.

Requirements
============

* Ruby 1.9
* EventMachine-based server (e.g. thin or rainbows)

Usage
=======

Add a require and use statement to your Rack app.  See example/app.rb for a simple Sinatra app which illustrates proper usage.  In general, you want the FiberPool to be inserted as early as possible in the middleware pipeline.

Options
=======

You may fix the pool size, otherwise it defaults to 100:

    use Rack::FiberPool, :size => 25

All exceptions raised by request handled within a fiber are rescued, by default returning a 500 with no body content. You may customize exceptions rescuing by providing a Proc object conforming to Rack's API:

    rescue_exception = Proc.new { |env, exception| [503, {}, exception.message] }
    use Rack::FiberPool, :rescue_exception => rescue_exception

Rails
=====

You can see your app's current pipeline of Rack middleware using:

    rake middleware

Add Rack::FiberPool to your middleware in `config/environment.rb`:

    require 'rack/fiber_pool'
    Rails::Initializer.run do |config|
      config.middleware.use Rack::FiberPool
      config.threadsafe!
    end

If you do experience odd issues, make sure it appears as early in the pipeline as possible.  Anything
that sets/gets thread local variables (like the Rails' session) or performs I/O should be later in the pipeline.  For example, ActionController::Session::CookieStore does not work if it appears before Rack::FiberPool.

You can explicitly place the FiberPool like so:

    ActionController::Dispatcher.middleware.insert_before ActionController::Session::CookieStore, Rack::FiberPool


Thanks to
==========

Eric Wong - for adding explicit support for Rack::FiberPool to rainbows.


Changes
==========

0.9.3 - fix incompatibility with sinatra streaming, new maintainer (alebsack)
1.0.0.beta.1 - Refactor, maintaining compatibility

Authors
======

Adam Lebsack, [Github](http://github.com/alebsack), alebsack AT gmail.com.

Mike Perham, [Twitter](http://twitter.com/mperham), [Github](http://github.com/mperham), mperham AT gmail.com.