export your sinatra app to a directory of static files. requires “sinatra-advanced-routes”. get requests and response-status 200 only (no redirects). you also have to copy the public-dir yourself (if you’re using it).
require 'sinatra_static' builder = SinatraStatic.new(MySinatraApp) builder.build!('/Users/paul/my_static_site')
this simple app:
require 'sinatra' require "sinatra/advanced_routes" require 'sinatra_static' class MyApp::App < Sinatra::Base get '/' do "my homepage" end get '/blog' do "blog index" end get '/blog/ajax.html' do "blog index w/o layout" end %w(page1 page2 page3).each do |page| get "/blog/#{page}" do "blog page: #{page}" end end get '/dynamic.js' do "my generated javascript" end get '/data.json' do "my generated json" end end builder = SinatraStatic.new(MyApp:App) builder.build!('/Users/paul/my_static_site')
will generate this output:
~/my_static_site/index.html -> "my homepage" ~/my_static_site/blog/index.html -> "blog index" ~/my_static_site/blog/ajax.html -> "blog index w/o layout" ~/my_static_site/blog/page1/index.html -> "blog page: page1" ~/my_static_site/blog/page2/index.html -> "blog page: page2" ~/my_static_site/blog/page3/index.html -> "blog page: page3" ~/my_static_site/dynamic.js -> "my generated javascript" ~/my_static_site/data.json -> "my generated json"
gem install sinatra-static
or in your Gemfile
gem 'sinatra-static', '>= 0.1.1'