A Mongrel2 ™ backend handler written in Ruby. Also includes Rack adpater to get you up and running quickly.
You'll need following prerequisites first:
Next, in your Gemfile
add:
gem 'm2r'
And finally run:
bundle install
Add m2r
to Gemfile
and run bundle install
Configure Handler
for your application:
rack_example = Handler(
send_spec = "tcp://127.0.0.1:9997",
send_ident = "14fff75f-3474-4089-af6d-bbd67735ab89",
recv_spec = "tcp://127.0.0.1:9996",
recv_ident = ""
)
[bundle exec] rackup -s mongrel2 application.ru
Add -O option_name
to provide options for m2r handler:
[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
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.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.
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:
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.
[bundle exec] rackup -s mongrel2 another.ru -O connection_factory=custom_name
Implement custom factory in a file like in a previous paragraph.
Load the file using -r
option for rackup
and use connection_factory
option.
[bundle exec] rackup -r custom_name.rb -s mongrel2 another.ru -O connection_factory=custom_name
Set HTTPS
env to true
.
HTTPS=true [bundle exec] rackup -s mongrel2 application.ru
For Mongrel2 1.8 and newer this is not necessary.
TBD
Starting from version 0.1.0
this gem follows semantic versioning policy.
In the spirit of free software, everyone is encouraged to help improve this project.
Here are some ways you can contribute:
Read Contributing page before sending Pull Request :)
We use the GitHub issue tracker to track bugs and features. Before submitting a bug report or feature request, check to make sure it hasn't already been submitted. When submitting a bug report, please include a Gist that includes a stack trace and any details that may be necessary to reproduce the bug, including your gem version, Ruby version, and operating system. Ideally, a bug report should include a pull request with failing tests.
bundle exec rake
. If your test pass, return to step 3.bundle exec rake
. If your tests fail, return to step 5.This library aims to support and is tested against the following Ruby implementations:
Mongrel2 is a registered trademark of Zed A. Shaw who wrote it. And it is awesome.