123456789_123456789_123456789_123456789_123456789_

Plugins

Puma 3.0 added support for plugins that can augment configuration and service operations.

There are two canonical plugins to aid in the development of new plugins:

Plugins are activated in a Puma configuration file (such as config/puma.rb') by adding plugin "name", such as plugin "heroku".

Plugins are activated based on path requirements so, activating the heroku plugin is much like require "puma/plugin/heroku". This allows gems to provide multiple plugins (as well as unrelated gems to provide Puma plugins).

The tmp_restart plugin comes with Puma, so it is always available.

To use the heroku plugin, add puma-heroku to your Gemfile or install it.

API

Server-wide hooks

Plugins can use a couple of hooks at the server level: start and config.

start runs when the server has started and allows the plugin to initiate other functionality to augment Puma.

config runs when the server is being configured and receives a DSL object that is useful for additional configuration.

Public methods in Plugin are treated as a public API for plugins.

Binder hooks

There's Puma::Binder#before_parse method that allows to add proc to run before the body of Puma::Binder#parse. Example of usage can be found in that repository (before_parse_hook could be renamed before_parse, making monkey patching of binder.rb is unnecessary).