Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Health checking Rack middleware
Fetching latest commit...
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
examples ii
lib/rack some more flexibility
spec adding dev instructions
.gitignore ii
Gemfile ii
Guardfile ii some more flexibility
Rakefile ii


A Rack middleware that should indicate the health of your service.


Here is a simple example (see examples):

map '/ping' do
  use Rack::Ping do |ping|
    ping.check_url  "http://localhost:9292/"
    ping.ok_regex /goodbye/

run lambda{|env| [200, {'Content-Type' => 'text/html'}, ["hello"]]}

If you also run on Rails, for more control, you can also use it in directly your routes:

# no block
Rails.application.routes.draw do
  mount => '/ping'

# using a ping block
Rails.application.routes.draw do
  mount { |ping|
    ping.check_url ""
  }, at: '/ping'

Note: for pre-1.4.0 Rack, do this:

p =
p.check { true }
run"/" => My::App, "/ping" => p)

Due to different to_app strategy:


When building/mounting your rack, use the ping configuration variable, specify:

  • version is an accessor for your application version. App::VERSION would be a good idea.
  • check_url is a url that ping will fetch and run ok_regex on. If the match is ok, we're good. You must specify check_url and ok_regex togather. timeout_secs is the amount of seconds we wait until spitting out an error.
  • check will accept a block to run. This is a good alternative to check_url: run a couple of sanity checks to indicate you're good.
  • ok_code, error_code, ok_text, error_text are configuration for you to use, to configure against LB quirks. The default config should work against ELBs (Amazon elastic LB).


ping will output intelligent headers. First x-ping-error will try to explain why ping failed.

Next, x-app-version will expose the current deployed version of your app. This is good in order to validate nothing crawled up to production, as well as validation for post-production deployment.

ping will bust any browser/client cache for you.


Guard is set up for your ease of development. Here's how to go from 0 to ready.

$ git clone
$ cd rack-ping
$ bundle install
$ guard

Fork, implement, add tests, pull request, get my everlasting thanks and a respectable place here :).


Copyright (c) 2011 Dotan Nahum @jondot. See MIT-LICENSE for further details.

Something went wrong with that request. Please try again.