Skip to content

Commit

Permalink
Static Server based on Sinatra
Browse files Browse the repository at this point in the history
Using Sinatra provides better handling of mime types and supports
304's/etc.

Also updated the Gemfile to exclude most gem outside of developemnt
(default).
  • Loading branch information
scottwater committed Aug 22, 2011
1 parent 23f05c1 commit 423e8ec
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 36 deletions.
26 changes: 15 additions & 11 deletions Gemfile
@@ -1,13 +1,17 @@
source "http://rubygems.org" source "http://rubygems.org"


gem 'rake' group :development do
gem 'rack' gem 'rake'
gem 'jekyll' gem 'rack'
gem 'rdiscount' gem 'jekyll'
gem 'pygments.rb' gem 'rdiscount'
gem 'RedCloth' gem 'pygments.rb'
gem 'haml', '>= 3.1' gem 'RedCloth'
gem 'compass', '>= 0.11' gem 'haml', '>= 3.1'
gem 'rubypants' gem 'compass', '>= 0.11'
gem 'rb-fsevent' gem 'rubypants'
gem 'stringex' gem 'rb-fsevent'
gem 'stringex'
end

gem 'sinatra', '1.2.6'
5 changes: 5 additions & 0 deletions Gemfile.lock
Expand Up @@ -40,8 +40,12 @@ GEM
blankslate (>= 2.1.2.3) blankslate (>= 2.1.2.3)
ffi (~> 1.0.7) ffi (~> 1.0.7)
sass (3.1.5) sass (3.1.5)
sinatra (1.2.6)
rack (~> 1.1)
tilt (>= 1.2.2, < 2.0)
stringex (1.3.0) stringex (1.3.0)
syntax (1.0.0) syntax (1.0.0)
tilt (1.3.2)


PLATFORMS PLATFORMS
ruby ruby
Expand All @@ -57,4 +61,5 @@ DEPENDENCIES
rb-fsevent rb-fsevent
rdiscount rdiscount
rubypants rubypants
sinatra (= 1.2.6)
stringex stringex
40 changes: 15 additions & 25 deletions config.ru
@@ -1,35 +1,25 @@
require 'rubygems'
require 'bundler/setup' require 'bundler/setup'
require 'rack' require 'sinatra/base'


# The project root directory # The project root directory
$root = ::File.dirname(__FILE__) $root = ::File.dirname(__FILE__)


# Common Rack Middleware class SinatraStaticServer < Sinatra::Base
use Rack::ShowStatus # Nice looking 404s and other messages
use Rack::ShowExceptions # Nice looking errors


# get(/.+/) do
# From Rack::DirectoryIndex: send_sinatra_file(request.path) {404}
# https://github.com/craigmarksmith/rack-directory-index/
#
module Rack
class DirectoryIndex
def initialize(app)
@app = app
end
def call(env)
index_path = ::File.join($root, 'public', Rack::Request.new(env).path.split('/'), 'index.html')
if ::File.exists?(index_path)
return [200, {"Content-Type" => "text/html"}, [::File.read(index_path)]]
else
@app.call(env)
end
end
end end
end


use Rack::DirectoryIndex not_found do
send_sinatra_file('404.html') {"Sorry, I cannot find #{request.path}"}
end


run Rack::Directory.new($root + '/public') def send_sinatra_file(path, &missing_file_block)
file_path = File.join(File.dirname(__FILE__), 'public', path)
file_path = File.join(file_path, 'index.html') unless file_path =~ /\.[a-z]+$/i
File.exist?(file_path) ? send_file(file_path) : missing_file_block.call
end

end


run SinatraStaticServer

0 comments on commit 423e8ec

Please sign in to comment.