Hier ist eine grundlegende Vorlage für Sinatra-Apps, die ich verwende. (In meinen größeren Apps sind mehr als 200 Dateien wie diese aufgeschlüsselt, wobei die Edelsteine des Anbieters nicht berücksichtigt werden und 75 bis 100 explizite Routen abgedeckt werden. Einige dieser Routen sind Regexp-Routen, die weitere 50 Routenmuster abdecken.) Wenn Sie Thin verwenden, führen Sie eine aus App wie diese mit:
thin -R config.ru start
Bearbeiten : Ich pflege jetzt mein eigenes Mönchsgerüst basierend auf den unten genannten Riblits . So kopieren Sie meine Vorlage als Grundlage für Ihre eigenen Projekte:
# Before creating your project
monk add riblits git://github.com/Phrogz/riblits.git
# Inside your empty project directory
monk init -s riblits
Dateilayout:
config.ru
app.rb.
Helfer /
init.rb.
partials.rb
Modelle /
init.rb.
user.rb
Routen /
init.rb.
login.rb
main.rb
Ansichten /
layout.haml
login.haml
main.haml
config.ru
root = ::File.dirname(__FILE__)
require ::File.join( root, 'app' )
run MyApp.new
app.rb.
# encoding: utf-8
require 'sinatra'
require 'haml'
class MyApp < Sinatra::Application
enable :sessions
configure :production do
set :haml, { :ugly=>true }
set :clean_trace, true
end
configure :development do
# ...
end
helpers do
include Rack::Utils
alias_method :h, :escape_html
end
end
require_relative 'models/init'
require_relative 'helpers/init'
require_relative 'routes/init'
Helfer / init.rb.
# encoding: utf-8
require_relative 'partials'
MyApp.helpers PartialPartials
require_relative 'nicebytes'
MyApp.helpers NiceBytes
helfer / partielle.rb
# encoding: utf-8
module PartialPartials
def spoof_request(uri,env_modifications={})
call(env.merge("PATH_INFO" => uri).merge(env_modifications)).last.join
end
def partial( page, variables={} )
haml page, {layout:false}, variables
end
end
helpers / nicebytes.rb
# encoding: utf-8
module NiceBytes
K = 2.0**10
M = 2.0**20
G = 2.0**30
T = 2.0**40
def nice_bytes( bytes, max_digits=3 )
value, suffix, precision = case bytes
when 0...K
[ bytes, 'B', 0 ]
else
value, suffix = case bytes
when K...M then [ bytes / K, 'kiB' ]
when M...G then [ bytes / M, 'MiB' ]
when G...T then [ bytes / G, 'GiB' ]
else [ bytes / T, 'TiB' ]
end
used_digits = case value
when 0...10 then 1
when 10...100 then 2
when 100...1000 then 3
else 4
end
leftover_digits = max_digits - used_digits
[ value, suffix, leftover_digits > 0 ? leftover_digits : 0 ]
end
"%.#{precision}f#{suffix}" % value
end
module_function :nice_bytes # Allow NiceBytes.nice_bytes outside of Sinatra
end
models / init.rb.
# encoding: utf-8
require 'sequel'
DB = Sequel.postgres 'dbname', user:'bduser', password:'dbpass', host:'localhost'
DB << "SET CLIENT_ENCODING TO 'UTF8';"
require_relative 'users'
models / user.rb
# encoding: utf-8
class User < Sequel::Model
# ...
end
Routen / init.rb.
# encoding: utf-8
require_relative 'login'
require_relative 'main'
routen / login.rb
# encoding: utf-8
class MyApp < Sinatra::Application
get "/login" do
@title = "Login"
haml :login
end
post "/login" do
# Define your own check_login
if user = check_login
session[ :user ] = user.pk
redirect '/'
else
redirect '/login'
end
end
get "/logout" do
session[:user] = session[:pass] = nil
redirect '/'
end
end
routen / main.rb.
# encoding: utf-8
class MyApp < Sinatra::Application
get "/" do
@title = "Welcome to MyApp"
haml :main
end
end
Ansichten / layout.haml
!!! XML
!!! 1.1
%html(xmlns="http://www.w3.org/1999/xhtml")
%head
%title= @title
%link(rel="icon" type="image/png" href="/favicon.png")
%meta(http-equiv="X-UA-Compatible" content="IE=8")
%meta(http-equiv="Content-Script-Type" content="text/javascript" )
%meta(http-equiv="Content-Style-Type" content="text/css" )
%meta(http-equiv="Content-Type" content="text/html; charset=utf-8" )
%meta(http-equiv="expires" content="0" )
%meta(name="author" content="MeWho")
%body{id:@action}
%h1= @title
#content= yield
require "sequel"
undDB
Initialisieren inmodels/init.rb
und Verwendenrequire_relative
für alle Dateien - ist, dass Sie in Ihrmodels
Verzeichnis cd , eine IRB-Konsole öffnen und eingeben könnenrequire './init'
und Ihr vollständiges Datenbank- und Modell-Setup für die interaktive Erkundung geladen haben .