lighty's life

lighty developer blog

Lighttpd 1.4.8 and Multiple Rails-apps

lighttpd 1.4.8 was just released and next to a pile of bugfixes we added a new option to fastcgi.server to allow a simple setup of multiple rails app in one virtual host.

Next to the usual setup with fastcgi.server the new option ‘strip-request-uri’ removes parts of the request-uri before they are sent to the backend:

$HTTP["url"] =~ "^/app1/" {
  server.document-root = "/home/jan/rails/app1/public/"
  alias.url = ( "/app1/" => "/home/jan/rails/app1/public/" )
  server.error-handler-404 = "/app1/dispatch.fcgi"
  fastcgi.server = ( "/app1/dispatch.fcgi" =>
    (( "socket" => "/tmp/app1.socket1",
       "bin-path" =>  "/home/jan/rails/app1/public/dispatch.fcgi",
       "strip-request-uri" => "/app1/"
  )))
}

$HTTP["url"] =~ "^/app2/" {
  server.document-root = "/home/jan/rails/app2/public/"
  alias.url = ( "/app2/" => "/home/jan/rails/app2/public/" )
  server.error-handler-404 = "/app2/dispatch.fcgi"
  fastcgi.server = ( "/app2/dispatch.fcgi" =>
    (( "socket" => "/tmp/app2.socket1",
       "bin-path" =>  "/home/jan/rails/app2/public/dispatch.fcgi",
       "strip-request-uri" => "/app2"
  )))
}

But why ?

Rails has a strict mapping of URLs to the application:


/controller/action/parameter

and as soon as you want to run multiple rails apps at the same virtual host you will get the namespace-clashs.

/app1/controller/action/parameter
/app2/controller/action/parameter

looks better and all we have do now is stripping the /appx before we hand it over to rails.

Later we will add this option to mod_scgi and mod_proxy too or even add a rewrite at that level.