Test Sinatra App

The purpose of this repo is to have, what I would consider, a standard standalone sinatra application that someone might want to package.

The goal is to have it work in the following configurations:

  • With and without bundler
  • With and without rvm
  • MRI installable gem
  • JRuby installable gem
  • Standalone application via bin script
  • rackable application via config.ru
  • Warble-packaged deployable warfile (both jetty and tomcat)
  • Warble standalone winstone warfile
  • SSL works with JRuby

Additionally, it needs to be flexible in accepting a single configuration option: sky_color.

So what works?

  • MRI and Jruby specific gem packages
  • Standalone bin execution with and without the custom option (MRI and Jruby)
  • Rackup with and without custom option (in config.ru) in MRI and Jruby (both rvm and downloaded)

What's not working?

Warbler. I'm just not having any luck no matter what options I try. I've attempted to make the war:

  • With/without gemjar
  • With/without executable
  • With/without using bundler in warble.rb
  • With/without requiring rubygems in the config.ru

I've seen every error under the sun in attempting to follow this same application style across three different codebases now:

  • Winstone goes into infinite redirect
  • LoadErrors on random gems
  • Jetty 6 works but Jetty 7 doesn't. Or Tomcat works but no Jetty's work
  • jruby-openssl/bouncy castle errors

How to help

Fork it and fix it. Use it as a test case. Let me know if I'm just expecting to be able to do too much from a single codebase. Show me where I'm screwing up.

Why?

I work in a cross-vm world. At my day job, we're primarily a java shop. I use Ruby (and especially sinatra) for various glue applications and it's much easier to be able to package and deploy those to a container. The developers need to have those applications available locally for testing, so a winstone self-executing war is a godsend (when it works).

In my personal projects (like Noah), I want to reach the biggest possible audience. I want to make it as easy as possible for someone to try out the application. That means supporting all of the use cases above.