Chef cookbook to deploy Rack-based Ruby web application(s) (Rails, Sinatra, etc) with Passenger standalone.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

simple_passenger Chef Cookbook

Chef cookbook Travis

Chef cookbook to deploy Rack-based Ruby web application(s) (Rails, Sinatra, etc) with Passenger standalone.


First, include recipe[simple_passenger::default] on your node's run list. This will install common dependencies for Rack web apps. See the default recipe for more details.

To deploy your app(s) with this cookbook, you can use the simple_passenger_app LWRP in another cookbook. You can also define apps in the attribute ['passenger']['apps'] as a hash. The keys of this hash should be the name of the app, and the values should be a hash of properties you want to call on the simple_passenger_app LWRP. The default recipe will iterate over this hash and call the LWRP for you with the properties you have defined. You can see an example of this attribute approach in the ChefSpec attributes or the Test Kitchen attributes.

simple_passenger_app LWRP

Below are each of the properties defined on the LWRP, see the resource definition for defaults and more details. See the default recipe in the fixture cookbook used by Test Kitchen integration tests for an example of using this LWRP.

Property Ruby class Examples Description
app_name String 'my-app' Name of app to deploy
git_repo String '' The URI for the git repository. See the Chef git resource.
git_revision String 'master', 'v1.2.3' The URI for the git repository. See the Chef git resource.
ruby_version String '2.2.6', 'jruby-' ruby-build definition to install. See the ruby_build_ruby LWRP.
ruby_bin String '/path/to/ruby', '/opt/chef/embedded/bin/ruby' Path of a different Ruby to use (should be in a bin/ directory). Setting this prevents installing a Ruby with the ruby_build_ruby LWRP.
bundler_version String '1.13.1', '~> 1.12' Version of Bundler to install (should be a RubyGems version specification).
passengerfile Hash { environment: 'development', port: 8080 } Properties to specify in Passengerfile.json (will be merged over sensible defaults).
passengerfile_mode String, Integer '644' Permissions to set on Passengerfile.json. See the Chef file resource.
log_dir_mode String, Integer '0755' Permissions to set on the log directory for the app. See the Chef directory resource.
logrotate_frequency String 'daily' See the logrotate_app LWRP
logrotate_rotate Integer 7 See the logrotate_app LWRP


Multiple apps

This cookbook support multiple apps just as expected. Simply call the LWRP multiple times (or define multiple apps in the attribute ['passenger']['apps'] as a hash). Be sure to bind each app to a different port.


Chefspec unit tests and Test Kitchen integration tests are run on all pushes to GitHub by Travis CI.

# install gem dependencies
# unit tests
bundle exec rspec
# integration tests with kitchen-vagrant
bundle exec kitchen test

Test Kitchen integration tests are on Travis CI use Docker via kitchen-docker. If you'd like to use Docker to run Test Kitchen integration tests locally:

# Ensure docker is running first
# On Mac OS X you may need to have sudo commands available with no password,
# the easiest way to do this is run a command as sudo so the next command won't prompt
# for a password
sudo ls
# Run Test Kitchen integration tests with docker (uses concurrency) bundle exec kitchen test

Big thanks to for the Travis / Test Kitchen guide


Enhancements and bug fixes are appreciated! Remember, this cookbook is designed to be simple.

  1. Fork the repo
  2. Create a feature or fix branch with an intuitive name (fix/some-bug, feat/some-feature)
  3. Add relevant tests (kitchen, chefspec, etc)
  4. Create a pull request back to this repo

Chef Supermarket

This cookbook is available in the community Chef Supermarket. To push new versions with stove:

bundle install
# make changes
# update metadata version
git commit -am 'some fixes'
git push
# tag and push to supermarket