README.md in m2r-1.0.0 vs README.md in m2r-2.0.0

- old
+ new

@@ -3,10 +3,16 @@ A [Mongrel2](http://mongrel2.org/) [™](#legal) backend handler written in Ruby. Also includes Rack adpater to get you up and running quickly. [![Build Status](https://secure.travis-ci.org/perplexes/m2r.png)](http://travis-ci.org/perplexes/m2r) [![Dependency Status](https://gemnasium.com/perplexes/m2r.png)](https://gemnasium.com/perplexes/m2r) +Documentation +------------- + +* [Tutorial](http://documentup.com/perplexes/m2r/recompile) +* [API](http://www.rubydoc.info/gems/m2r/frames) + Installation ------------ You'll need following prerequisites first: @@ -53,17 +59,74 @@ [bundle exec] rackup -s mongrel2 application.ru ``` Add `-O option_name` to provide options for m2r handler: -```ruby +```bash [bundle exec] rackup -s mongrel2 another.ru -O recv_addr=tcp://127.0.0.1:9995 -O send_addr=tcp://127.0.0.1:9994 ``` #### Options * `recv_addr` - This is the `send_spec` option from `Handler` configuration in `mongrel2.conf`. Default: `tcp://127.0.0.1:9997` * `send_addr` - This is the `recv_spec` option from `Handler` configuration in your `mongrel2.conf`. Default: `tcp://127.0.0.1:9996` +* `factory` - Use it to load custom `ConnectionFactory` that implements rules for ZMQ connections to Mongrel 2. + +#### Custom Connection Factory + +ZMQ allows to set multiple options and connect to large number of endpoints. Providing every ZMQ option for handler connections +would be troublesome. Instead you can use your custom implementation that deals only with that fact. + +##### Automatic require of custom connection factory + +The first way to do it is to implement custom class in a file that can be required with `m2r/connection_factory/custom_name`. +The location of such file might depends on how `$LOAD_PATH` is configured but for standard Rails application or gem that +would like to depend on `m2r` it would be: `lib/m2r/connection_factory/custom_name`. + +Implement the Factory in the file: + +```ruby +module M2R + class ConnectionFactory + # Just exemplary implementation ... + class CustomName < ConnectionFactory + def initialize(options) + # OpenStruct with rackup options for the handler (added with -O) + @options = options + end + + def connection + request_socket = @context.socket(ZMQ::PULL) + request_socket.connect("tcp://127.0.0.1:2222") + request_socket.setsockopt(ZMQ::RECONNECT_IVL, 5) + + response_socket = @context.socket(ZMQ::PUB) + response_socket.connect("tcp://127.0.0.1:3333") + response_socket.setsockopt(ZMQ::HWM, 100) + response_socket.setsockopt(ZMQ::RECONNECT_IVL, 5) + + Connection.new(request_socket, response_socket) + end + end + end +end +``` + +Use `connection_factory` option to select it. + +```bash +[bundle exec] rackup -s mongrel2 another.ru -O connection_factory=custom_name +``` + +##### Manual require of factory + +Implement custom factory in a file like in a previous paragraph. + +Load the file using `-r` option for `rackup` and use `connection_factory` option. + +```bash +[bundle exec] rackup -r custom_name.rb -s mongrel2 another.ru -O connection_factory=custom_name +``` #### Processing HTTPS requests from Mongrel2 1.7 Set `HTTPS` env to `true`.