#!/usr/bin/env ruby require 'webrick' require 'optparse' OPTIONS = { :port => 2500, :ip => "0.0.0.0", :environment => "production", :server_root => File.expand_path(File.dirname(__FILE__) + "/../public/"), :server_type => WEBrick::SimpleServer, :mime_types => WEBrick::HTTPUtils::DefaultMimeTypes.merge({ 'avi' => 'video/x-msvideo', 'gz' => 'application/x-gzip', 'js' => 'application/x-javascript', 'nb' => 'application/mathematica', 'pdf' => 'application/pdf', 'svg' => 'application/svg+xml', 'tar' => 'application/x-tar', 'tex' => 'application/x-tex', 'xhtml' => 'application/xhtml+xml', 'xml' => 'application/xml', 'xslt' => 'application/xslt+xml' }) } 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 Instiki on the specified port.", "Default: 2500") { |OPTIONS[:port]| } opts.on("-b", "--binding=ip", String, "Binds Instiki 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("-d", "--daemon", "Make Instiki run as a Daemon (only works if fork is available -- meaning on *nix)." ) { OPTIONS[:server_type] = WEBrick::Daemon } opts.separator "" opts.on("-h", "--help", "Show this help message.") { puts opts; exit } opts.parse! end ENV["RAILS_ENV"] = OPTIONS[:environment] require File.dirname(__FILE__) + "/../config/environment" require 'webrick_server' OPTIONS['working_directory'] = File.expand_path(RAILS_ROOT) puts "=> Instiki started on http://#{OPTIONS[:ip]}:#{OPTIONS[:port]}" puts "=> Ctrl-C to shutdown; call with --help for options" if OPTIONS[:server_type] == WEBrick::SimpleServer DispatchServlet.dispatch(OPTIONS)