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).
| ... | ... |
@@ -1,13 +1,17 @@ |
| 1 | 1 |
source "http://rubygems.org" |
| 2 | 2 |
|
| 3 |
-gem 'rake' |
|
| 4 |
-gem 'rack' |
|
| 5 |
-gem 'jekyll' |
|
| 6 |
-gem 'rdiscount' |
|
| 7 |
-gem 'pygments.rb' |
|
| 8 |
-gem 'RedCloth' |
|
| 9 |
-gem 'haml', '>= 3.1' |
|
| 10 |
-gem 'compass', '>= 0.11' |
|
| 11 |
-gem 'rubypants' |
|
| 12 |
-gem 'rb-fsevent' |
|
| 13 |
-gem 'stringex' |
|
| 14 | 3 |
\ No newline at end of file |
| 4 |
+group :development do |
|
| 5 |
+ gem 'rake' |
|
| 6 |
+ gem 'rack' |
|
| 7 |
+ gem 'jekyll' |
|
| 8 |
+ gem 'rdiscount' |
|
| 9 |
+ gem 'pygments.rb' |
|
| 10 |
+ gem 'RedCloth' |
|
| 11 |
+ gem 'haml', '>= 3.1' |
|
| 12 |
+ gem 'compass', '>= 0.11' |
|
| 13 |
+ gem 'rubypants' |
|
| 14 |
+ gem 'rb-fsevent' |
|
| 15 |
+ gem 'stringex' |
|
| 16 |
+end |
|
| 17 |
+ |
|
| 18 |
+gem 'sinatra', '1.2.6' |
|
| 15 | 19 |
\ No newline at end of file |
| ... | ... |
@@ -40,8 +40,12 @@ GEM |
| 40 | 40 |
blankslate (>= 2.1.2.3) |
| 41 | 41 |
ffi (~> 1.0.7) |
| 42 | 42 |
sass (3.1.5) |
| 43 |
+ sinatra (1.2.6) |
|
| 44 |
+ rack (~> 1.1) |
|
| 45 |
+ tilt (>= 1.2.2, < 2.0) |
|
| 43 | 46 |
stringex (1.3.0) |
| 44 | 47 |
syntax (1.0.0) |
| 48 |
+ tilt (1.3.2) |
|
| 45 | 49 |
|
| 46 | 50 |
PLATFORMS |
| 47 | 51 |
ruby |
| ... | ... |
@@ -57,4 +61,5 @@ DEPENDENCIES |
| 57 | 57 |
rb-fsevent |
| 58 | 58 |
rdiscount |
| 59 | 59 |
rubypants |
| 60 |
+ sinatra (= 1.2.6) |
|
| 60 | 61 |
stringex |
| ... | ... |
@@ -1,35 +1,25 @@ |
| 1 |
-require 'rubygems' |
|
| 2 | 1 |
require 'bundler/setup' |
| 3 |
-require 'rack' |
|
| 2 |
+require 'sinatra/base' |
|
| 4 | 3 |
|
| 5 | 4 |
# The project root directory |
| 6 | 5 |
$root = ::File.dirname(__FILE__) |
| 7 | 6 |
|
| 8 |
-# Common Rack Middleware |
|
| 9 |
-use Rack::ShowStatus # Nice looking 404s and other messages |
|
| 10 |
-use Rack::ShowExceptions # Nice looking errors |
|
| 7 |
+class SinatraStaticServer < Sinatra::Base |
|
| 11 | 8 |
|
| 12 |
-# |
|
| 13 |
-# From Rack::DirectoryIndex: |
|
| 14 |
-# https://github.com/craigmarksmith/rack-directory-index/ |
|
| 15 |
-# |
|
| 16 |
-module Rack |
|
| 17 |
- class DirectoryIndex |
|
| 18 |
- def initialize(app) |
|
| 19 |
- @app = app |
|
| 20 |
- end |
|
| 21 |
- def call(env) |
|
| 22 |
- index_path = ::File.join($root, 'public', Rack::Request.new(env).path.split('/'), 'index.html')
|
|
| 23 |
- if ::File.exists?(index_path) |
|
| 24 |
- return [200, {"Content-Type" => "text/html"}, [::File.read(index_path)]]
|
|
| 25 |
- else |
|
| 26 |
- @app.call(env) |
|
| 27 |
- end |
|
| 28 |
- end |
|
| 9 |
+ get(/.+/) do |
|
| 10 |
+ send_sinatra_file(request.path) {404}
|
|
| 29 | 11 |
end |
| 30 |
-end |
|
| 31 | 12 |
|
| 32 |
-use Rack::DirectoryIndex |
|
| 13 |
+ not_found do |
|
| 14 |
+ send_sinatra_file('404.html') {"Sorry, I cannot find #{request.path}"}
|
|
| 15 |
+ end |
|
| 33 | 16 |
|
| 34 |
-run Rack::Directory.new($root + '/public') |
|
| 17 |
+ def send_sinatra_file(path, &missing_file_block) |
|
| 18 |
+ file_path = File.join(File.dirname(__FILE__), 'public', path) |
|
| 19 |
+ file_path = File.join(file_path, 'index.html') unless file_path =~ /\.[a-z]+$/i |
|
| 20 |
+ File.exist?(file_path) ? send_file(file_path) : missing_file_block.call |
|
| 21 |
+ end |
|
| 22 |
+ |
|
| 23 |
+end |
|
| 35 | 24 |
|
| 25 |
+run SinatraStaticServer |
|
| 36 | 26 |
\ No newline at end of file |