Välkommen till Spår 1 av "Sjung med Sinatra." I denna mini-serie tar vi en titt på Sinatra; en liten, men oerhört kraftfull DSL för att snabbt skapa Ruby-webbapplikationer. I den här delen kommer vi att börja med Sinatra genom att leka med några rutter, lära sig hur man får åtkomst till URL-parametrar och hur man POST-data mellan sidor.
Om du inte har arbetat med Ruby innan, bör du kolla Ruby for Newbies-sessionen, där Andrew kommer att guida dig genom processen att installera Ruby på ditt system och lära dig grunderna i språket.
Det första vi behöver göra är att installera Sinatra RubyGem. Ange följande i terminalen:
pärla installera sinatra
Installera också "hagelgevär" pärla, som vi ska använda senare:
pärla installera hagelgevär
Beroende på hur du har skapat RubyGems på ditt system, kan du behöva prefixa gem installation
kommandon med sudo
.
Öppna din textredigerare och skapa en ny fil med namnet basics.rb
. Längst upp måste vi kräva RubyGems och Sinatra-pärlan:
kräver "rubygems" kräver "sinatra"
Obs! Om du kör Ruby 1.9 (som du borde vara;)) kan du släppa kräver "rubygems"
linje som Ruby laddar automatiskt RubyGems ändå.
Låt oss börja med att skapa den klassiska "Hello World". Lägg till följande i din basics.rb
ansökningsfil:
få "/" göra "Hej världen!" slutet
Detta är en "Route". Här säger vi Sinatra att om hemmet eller roten URL '/'
begärs, med den vanliga GET HTTP-metoden, för att visa "Hej, Värld!"
Nu, i terminalen, låt oss starta servern genom att skriva rubin basics.rb
. Vi får veta att Sinatra har "tagit scenen" på hamn 4567, och om vi går till http: // localhost: 4567 /
I en webbläsare ser vi "Hej världen!".
Så låt oss försöka en annan sida:
få '/ om' gör 'lite om mig'. slutet
När du ändrar din Sinatra-app måste du starta om servern.
Detta betyder om '/handla om'
URL begärs (med hjälp av GET HTTP-metoden), "Lite om mig". kommer att visa.
När du ändrar din Sinatra-app måste du starta om servern. Så för att spara oss besväret att ständigt stoppa och starta servern under utveckling, använder vi Shotgun-pärlan som vi installerat tidigare.
Stoppa den aktuella Sinatra-servern med Ctrl-C
. Nu kan vi springa hagelgevär basics.rb
och Shotgun startar automatiskt servern varje gång vi uppdaterar sidan. Det här är användbart när vi gör mycket utvecklingsarbete, men eftersom hela applikationen startas om, kan det vara långsamt.
Som Shotgun lyssnar på en annan hamn, låt oss flytta till hamn 9393 och gå till http: // localhost: 9393 / om
i din webbläsare. Du borde se den fras vi satt.
Du kan också komma åt parametrar från webbadressen. Lägg till följande i din basics.rb
fil:
få '/ hej /: namn' gör params [: namn] slut
I det här exemplet har vi en rutt där allt efter '/Hej/'
kommer att finnas i en params
array med nyckeln :namn
. De params
array innehåller alla GET- och POST-variabler. Om du kommer från en PHP-bakgrund liknar detta $ _REQUEST
global array.
I webbläsaren går du till, till exempel, http: // localhost: 9393 / hello / dan
och du ska se namnet som visas tillbaka ("dan").
Du kan införliva :namn
in i en sträng genom att sätta in den $ ?
. Försök att byta ut params [: namn]
linje med:
"Hej där, # params [: name]."
Som du kan förvänta oss kan vi använda alla normala Ruby-metoder på variabeln, till exempel .upcase
, .omvänd
etc.
"Hej där # params [: name] .upcase."
Du kan ställa in rutten för att acceptera flera variabler för fråga strängar som:
få "/ hej /: namn /: stad" gör "Hej där # params [: namn] från # params [: city]." slutet
I likhet med normala variabler i en webbadress låter Sinatra dig inkludera hämta wildcard-frågesträngar, så kallade "splat", med hjälp av en asterisk som så:
få '/ more / *' göra params [: splat] slutet
Något som ingår i webbadressen efter /Mer/
kommer att vara tillgängligt via : splat
nyckel i params
array.
Låt oss nu göra något lite mer intressant. Låt oss skapa ett formulär för att hämta data från användaren, gör sedan något med det. Vi använder också en "visningsfil", som gör det möjligt för oss att dela upp markeringen för en vy i en separat fil. Lägg till följande väg till din basics.rb
app-fil:
få "/ form" göra erb: blankett slut
Denna rutt laddar form.erb
ERB (Embedded Ruby) fil från a visningar /
katalogen. ERB-filer är vanligtvis vanliga HTML-filer som låter dig inkludera Ruby-kod inuti taggar, som kommer att analyseras innan de skickas till webbläsaren - precis som hur du innehåller PHP eller ASP-kod på en webbsida.
Så skapa en visningar /
katalog i samma mapp som basics.rb
fil. Och inuti visningar /
, skapa filen med namnet form.erb
med följande innehåll inuti:
hej från vyn
Peka på din webbläsare på http: // localhost: 9393 / formen
och du borde se meddelandet vi ställde in i visningsfilen.
Nu vet vi att allting fungerar, ändra innehållet i den filen till:
Uppdatera sidan och du ska se formuläret:
Men ange ett meddelande i textrutan och klicka på Skicka-knappen och du kommer att se Sinatras felsida och informera oss om att det inte finns en rutt för denna URL.
Du kanske undrar varför det här är, eftersom formuläret skickar till /form
, samma webbadress som formuläret är på, så det borde inte vara ett problem. Jo, skillnaden är att vi hämtar den här sidan via POST HTTP-metoden - och som du kan se på felsidan som Sinatra presenterar oss, kräver Sinatra en annan rutt för varje HTTP-metod.
Så lägg till följande väg till Sinatra app:
posta "/ formulär" gör "Du sa" # params [: message] "" slutet
Denna rutt är för POST-metoden, inte GET. Dessutom finns alla POST-variabler tillgängliga i samma params
array som GET-variabler, så vi kan hämta meddelandet som skickats med formuläret. Testa!
Så vad nästa? Låt oss skapa ett sätt att "kryptera" ett meddelande vi skickar så att det bara kan läsas av vår avsedda mottagare. Lägg till följande väg till Sinatra app:
få "/ hemlig" göra erb: hemlig slut
Du kommer förmodligen att hänga med det här. Denna rutt laddar upp ERB-visningsfilen på visningar / secret.erb
. Skapa den visningsfilen med följande:
Super Secret MI5 Message Encryptor!
Och skapa rutten för POST-metoden:
posta "/ hemlig" gör parametrar [: hemlig] .överskridande ände
OK, så nu har vi ett meddelande krypteringsprogram som använder en speciell "omvänd" metod för att få meddelandet till synes oläsligt, vi behöver ett sätt att dekryptera meddelandet:
få "/ dekryptera /: hemlig" gör parametrar [: hemlig] .överskridande ände
Där har du det! En superhemlig, mycket säker meddelandekrypterare som är tillräckligt bra för något lands intelligensbyrå.
Ansvarsfriskrivning: När vi säger "mycket säkra" och "kryptering", vänder vi faktiskt bara bokstäverna. Förlåt.
En sista sak vi kommer att röra på är 404 felsidor. Just nu om du går till en webbadress som det inte finns någon rutt för (t.ex.. / danisthebest
), ser du Sinatras fina felmeddelande. På en riktig app skulle vi vilja visa vårt eget fel. För att göra detta, använd helt enkelt hittades inte
rutt, som så:
not_found gör status 404 "inte hittad" slut
Här använder vi Sinatras status
metod för att ställa in HTTP-statuskoden för sidan till 404 (du kan använda samma metod för att ställa in någon statuskod, till exempel 201 när något skapas eller 403 när en inloggning misslyckades).
Du kan vidare refactor the hittades inte
väg genom att använda Sinatras stanna
metod:
not_found stoppa 404, "sidan inte hittad" slut
Så du har utfört din första duett med Sinatra! Förhoppningsvis kan du se hur enkelt den här DSL gör att skapa webbapps.
På nästa spår skapar vi en enkel "att göra" app ansluten till en SQLite-databas. Vi ska också ta en titt på det förvirrande SÄTTA
och Ta bort HTTP
metoder som ingen hörs av.
Notera: Du kan bläddra i de slutliga projektfilerna för denna handledning på GitHub.