A BERT-RPC server based on Ernie's Ruby interface but that uses Unicorn for worker process management.
Ernicorn supports BERT-RPC
cast requests. See the full BERT-RPC
specification at bert-rpc.org for more information.
Like Ernie before it, Ernicorn was developed at GitHub and is currently in production use serving millions of RPC requests every day.
$ gem install ernicorn
Starting The Server
ernicorn command to start a new RPC server:
$ ernicorn --help Usage: ernicorn [options] [config file] Start a Ruby BERT-RPC Server with the given options and config file. Options -h, --host=<host> Server address to listen on; default: 0.0.0.0 -p, --port=<portno> Server port to listen on; default: 8149 -l, --listen=<host>:<port> Listen addresses. Can be specified multiple times --log-level=0-4 Set the log level -d, --detached Run as a daemon -P, --pidfile=<file> Location to write pid file
The ernicorn server attempts to load the config file given or
config/ernicorn.rb when no config file is specified. See the example config
file examples/config.rb to get started. All Unicorn config options are
The config file should require any libraries needed for the server and register
server modules with
Ernicorn.expose(:modulename, TheModule). See the
examples/handler.rb file for a simple example handler.
ernicorn-ctrl command can be used to send various control and
informational commands to the running server process:
$ ernicorn-ctrl --help Usage: ernicorn-ctrl [-p <port>] <command> Issue a control command to an ernicorn server. The port option is used to specify a non-default control port. Commands: reload-handlers Gracefully reload all handler processes. stats Dump handler stats for the server. halt Shut down.
Ernicorn servers also support most Unicorn signals for managing worker processes and whatnot. See the SIGNALS file for more info.
script/bootstrap command is provided to setup a local gem environment for
It installs all gems under
vendor/gems and creates binstubs under a
directory. This is the best way to get setup for running tests and experimenting
in a sandbox.