mirror of
https://github.com/moparisthebest/android.moparisthebest.org
synced 2024-12-25 00:48:53 -05:00
Static Server based on Sinatra
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).
This commit is contained in:
parent
23f05c1158
commit
423e8ecbda
26
Gemfile
26
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'
|
@ -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
|
||||||
@ -57,4 +61,5 @@ DEPENDENCIES
|
|||||||
rb-fsevent
|
rb-fsevent
|
||||||
rdiscount
|
rdiscount
|
||||||
rubypants
|
rubypants
|
||||||
|
sinatra (= 1.2.6)
|
||||||
stringex
|
stringex
|
||||||
|
42
config.ru
42
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
|
||||||
|
|
||||||
|
not_found do
|
||||||
|
send_sinatra_file('404.html') {"Sorry, I cannot find #{request.path}"}
|
||||||
|
end
|
||||||
|
|
||||||
|
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
|
end
|
||||||
|
|
||||||
use Rack::DirectoryIndex
|
run SinatraStaticServer
|
||||||
|
|
||||||
run Rack::Directory.new($root + '/public')
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user