Platinum Partner

Lighttpd Rails Script

Adding these two files to your rails project will allow you to start a lighttpd server like you would start webrick. e.g.: './script/lighttpd' or './script/lighttpd -d -e production'

This is ./script/lighttpd:


#!/usr/local/bin/ruby

require 'optparse'

OPTIONS = {
  :port        => 8000,
  :ip          => "0.0.0.0",
  :daemon      => false,
  :environment => "development",
  :app_name    => "myapp",
}

ARGV.options do |opts|
  script_name = File.basename($0)
  opts.banner = "Usage: ruby #{script_name} [options]"

  opts.separator ""

  opts.on("-p", "--port=port", Integer,
          "Runs Rails on the specified port.",
          "Default: 3000") { |OPTIONS[:port]| }
  opts.on("-b", "--binding=ip", String,
          "Binds Rails to the specified ip.",
          "Default: 0.0.0.0") { |OPTIONS[:ip]| }
  opts.on("-e", "--environment=name", String,
          "Specifies the environment to run this server under (test/development/production).",
          "Default: development") { |OPTIONS[:environment]| }
  opts.on("-a", "--app-name=name", String,
          "Specifies the application name.",
          "Default: rails_app") { |OPTIONS[:environment]| }
  opts.on("-d", "--daemon",
          "Make lighttpd / Rails run as a Daemon (only works if fork is available -- meaning on *nix)."
          ) { OPTIONS[:daemon] = true }

  opts.separator ""

  opts.on("-h", "--help",
          "Show this help message.") { puts opts; exit }

  opts.parse!
end

ENV["RAILS_ENV"] = OPTIONS[:environment]
RAILS_ROOT = File.dirname(__FILE__) + "/../"
LIGHTTPD_CONF_FILE = "/tmp/#{OPTIONS[:app_name]}_lighttpd.conf"

File.open("#{RAILS_ROOT}config/lighttpd.conf", "r") do |file|
        conf = file.read
  conf.gsub!(/PORT/, OPTIONS[:port].to_s)
  conf.gsub!(/BINDING/, OPTIONS[:ip])
  conf.gsub!(/RAILS_ROOT/, File.expand_path(RAILS_ROOT))
  conf.gsub!(/APP_NAME/, OPTIONS[:app_name])
  File.open(LIGHTTPD_CONF_FILE, "w") { |output| output.write(conf) }
end

CMD = "lighttpd -f #{LIGHTTPD_CONF_FILE}" 
CMD << " -D" unless OPTIONS[:daemon]
puts CMD
`#{CMD}`


And this is ./config/lighttpd.conf


server.port                = PORT
server.bind                = "BINDING"

server.pid-file             = "/tmp/APP_NAME_lighttpd.pid"
#server.event-handler = "freebsd-kqueue" 

server.modules = ( "mod_rewrite", "mod_redirect", "mod_access", "mod_fastcgi", "mod_accesslog" )

server.document-root        = "RAILS_ROOT/public/"
server.indexfiles           = ( "dispatch.fcgi", "index.html" )
accesslog.filename          = "RAILS_ROOT/log/lighttpd_access.log"
server.errorlog             = "RAILS_ROOT/log/lighttpd_error.log"
server.error-handler-404 = "/dispatch.fcgi"


#### fastcgi module
## read fastcgi.txt for more info
fastcgi.server =  (
  ".fcgi" => (
    "APP_NAME" => ( 
      "socket" => "/tmp/APP_NAME1.socket",
      "bin-path" => "RAILS_ROOT/public/dispatch.fcgi",
      "min-procs" => 1,
      "max_procs" => 2
    )
  )
)

# mimetype mapping
mimetype.assign             = (
  ".rpm"          =>      "application/x-rpm",
  ".pdf"          =>      "application/pdf",
  ".sig"          =>      "application/pgp-signature",
  ".spl"          =>      "application/futuresplash",
  ".class"        =>      "application/octet-stream",
  ".ps"           =>      "application/postscript",
  ".torrent"      =>      "application/x-bittorrent",
  ".dvi"          =>      "application/x-dvi",
  ".gz"           =>      "application/x-gzip",
  ".pac"          =>      "application/x-ns-proxy-autoconfig",
  ".swf"          =>      "application/x-shockwave-flash",
  ".tar.gz"       =>      "application/x-tgz",
  ".tgz"          =>      "application/x-tgz",
  ".tar"          =>      "application/x-tar",
  ".zip"          =>      "application/zip",
  ".mp3"          =>      "audio/mpeg",
  ".m3u"          =>      "audio/x-mpegurl",
  ".wma"          =>      "audio/x-ms-wma",
  ".wax"          =>      "audio/x-ms-wax",
  ".ogg"          =>      "audio/x-wav",
  ".wav"          =>      "audio/x-wav",
  ".gif"          =>      "image/gif",
  ".jpg"          =>      "image/jpeg",
  ".jpeg"         =>      "image/jpeg",
  ".png"          =>      "image/png",
  ".xbm"          =>      "image/x-xbitmap",
  ".xpm"          =>      "image/x-xpixmap",
  ".xwd"          =>      "image/x-xwindowdump",
  ".css"          =>      "text/css",
  ".html"         =>      "text/html",
  ".htm"          =>      "text/html",
  ".js"           =>      "text/javascript",
  ".asc"          =>      "text/plain",
  ".c"            =>      "text/plain",
  ".conf"         =>      "text/plain",
  ".text"         =>      "text/plain",
  ".txt"          =>      "text/plain",
  ".dtd"          =>      "text/xml",
  ".xml"          =>      "text/xml",
  ".mpeg"         =>      "video/mpeg",
  ".mpg"          =>      "video/mpeg",
  ".mov"          =>      "video/quicktime",
  ".qt"           =>      "video/quicktime",
  ".avi"          =>      "video/x-msvideo",
  ".asf"          =>      "video/x-ms-asf",
  ".asx"          =>      "video/x-ms-asf",
  ".wmv"          =>      "video/x-ms-wmv",
  ".bz2"          =>      "application/x-bzip",
  ".tbz"          =>      "application/x-bzip-compressed-tar",
  ".tar.bz2"      =>      "application/x-bzip-compressed-tar"
 )
{{ tag }}, {{tag}},

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks
Tweet

{{parent.nComments}}