DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Snippets has posted 5883 posts at DZone. View Full User Profile

Lighttpd Rails Script V2

04.10.2012
| 9029 views |
  • submit to reddit
        Small adjustments to the original:

- respect the app-name argument
- support taking min / max processes on the command line

Script:

#!/usr/local/bin/ruby

require 'optparse'

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

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: my_app") { |OPTIONS[:app_name]| }
   opts.on("-d", "--daemon",
           "Make lighttpd / Rails run as a Daemon (only works if fork is available -- meaning on *nix)."
           ) { OPTIONS[:daemon] = true }
   opts.on("-n", "--min-procs=number", Integer,
           "Minimum number of FastCGI processes allowed.",
           "Default: 1") { |OPTIONS[:min_procs]| }
   opts.on("-m", "--max-procs=number", Integer,
           "Maximum number of FastCGI processes allowed.",
           "Default: 3") { |OPTIONS[:max_procs]| }

   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])
   conf.gsub!(/MIN_PROCS/, OPTIONS[:min_procs].to_s)
   conf.gsub!(/MAX_PROCS/, OPTIONS[:max_procs].to_s)
   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}`

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" => MIN_PROCS,
       "max_procs" => MAX_PROCS
     )
   )
)


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"
  )