On Thursday afternoon, I had an idea for just about the smallest web app I could think of (since then, I’ve even cut out a couple features). It didn’t make sense to use all of Ruby on Rails for this considering how tiny it was.
Seemed like a great opportunity to try out Sinatra1
- Write the app
- Vendor Sinatra and Rack (that’s just good practice)
- Submit a ticket requesting a port
- Add a config.ru file to your app’s directory (for Rack) containing the following
# PATH TO VENDOR-ED RACK AND SINATRA
require 'vendor/rack-[VERSION]/lib/rack'
require 'vendor/sinatra-[VERSION]/lib/sinatra'
Sinatra::Application.set(
:run => false,
:environment => :production
)
require 'app'
run Sinatra::Application
- Add a config.yml file to your app’s directory for Thin containing the following
---
environment: production
chdir: /path/to/app
address: 127.0.0.1
user: [USERNAME]
port: [PORT]
pid: /path/to/domain/tmp/thin.pid
rackup: /path/to/app/config.ru
log: /path/to/domain/logs/thin.log
max_conns: 1024
timeout: 30
max_persistent_conns: 512
daemonize: true
Follow the Setting up and Configuring Lighttpd instructions on the Joyent Wiki(See update below)- Add another Bootup Action for Thin
Startupthin -s 1 -C /path/to/config.yml -R /path/to/config.ru start
Shutdownthin -s 1 -C /path/to/config.yml -R /path/to/config.ru stop
- Follow the Proxying to a Port instructions on the Joyent Wiki
1. If the time I spent building this app was a cocktail, it’d be 1 part programming, 2 parts design, 3 parts deployment. That’s a huge part of why I wrote this post.
UPDATE: March 8, 2009
My gut says Lighttpd + Thin is redundant, so I’ve turned Lighttpd off.