Sang med Sinatra

Velkommen til Spor 1 av "Singing with Sinatra." I denne mini-serien tar vi en titt på Sinatra; en liten, men likevel utrolig kraftig DSL for raskt å lage Ruby web-applikasjoner. I denne delen begynner vi med Sinatra ved å spille rundt med noen ruter, lære hvordan du får tilgang til nettadresseparametere og hvordan du POST-data mellom sider.

Hvis du ikke har jobbet med Ruby før, bør du sjekke ut Ruby for Newbies-økten, der Andrew vil veilede deg gjennom prosessen med å installere Ruby på systemet ditt og lære grunnleggende om språket.

Første ting vi trenger å gjøre er å installere Sinatra RubyGem. Skriv inn følgende i terminalen:

 perle installere sinatra

Også installer "haglgevær" perlen, som vi vil bruke senere:

 perle installasjon hagle

Avhengig av hvordan du har RubyGems satt opp på systemet, må du kanskje prefikse perle installasjon kommandoer med sudo.


Svært grunnleggende

Åpne tekstredigeringsprogrammet og opprett en ny fil med navnet basics.rb. Høyt oppe må vi kreve RubyGems og Sinatra perlen:

 krever 'rubygems' krever 'sinatra'

Merk: Hvis du kjører Ruby 1.9 (som du skal være;)), kan du slippe krever "rubygems" linje som Ruby laster automatisk RubyGems uansett.

La oss starte med å lage den klassiske "Hello World". Legg til følgende i din basics.rb søknadsfil:

 få '/' gjør "Hei, verden!" slutt

Dette er en "rute". Her forteller vi Sinatra at hvis hjemme, eller rot, nettadresse '/' blir bedt om å vise "Hello, World!" med den vanlige GET HTTP-metoden.

Nå, i terminalen, la oss starte serveren ved å skrive rubin basics.rb. Vi blir fortalt at Sinatra har "tatt scenen" på port 4567, og hvis vi går til http: // localhost: 4567 / I en nettleser ser vi "Hei, Verden!".

Så la oss prøve en annen side:

 få '/ om' gjør 'litt om meg'. slutt

Når du endrer din Sinatra app, må du starte serveren på nytt.

Dette betyr om '/handle om' URL blir forespurt (ved hjelp av GET HTTP-metoden), "Litt om meg." vil vise.

Når du endrer din Sinatra app, må du starte serveren på nytt. Så for å redde oss bryet med å stadig stoppe og starte serveren under utviklingen, bruker vi Shotgun-perlen vi installerte tidligere.

Stopp den nåværende Sinatra-serveren med Ctrl-C. Nå kan vi løpe hagle basics.rb og Shotgun starter automatisk serveren hver gang vi oppdaterer siden. Dette er nyttig når vi gjør mye utviklingsarbeid, men da hele applikasjonen blir startet på nytt, kan det være sakte.

Som Shotgun lytter på en annen port, la oss flytte til port 9393 og gå til http: // localhost: 9393 / om i nettleseren din. Du bør se uttrykket vi satte.


Få tilgang til URL-parametere

Du kan også få tilgang til parametere fra nettadressen. Legg til følgende i din basics.rb fil:

 få '/ hei /: navn' gjør params [: navn] slutt

I dette eksemplet har vi en rute der noe etter '/Hallo/' vil være inneholdt i en params matrise med nøkkelen :Navn. De params array inneholder alle GET og POST variabler. Hvis du kommer fra en PHP-bakgrunn, ligner dette på $ _REQUEST global array.

I nettleseren, gå til, for eksempel, http: // localhost: 9393 / hei / dan og du bør se navnet som vises tilbake ("dan").

Du kan innlemme :Navn inn i en streng ved å pakke den inn $ ? . Prøv å erstatte params [: name] linje med:

 "Hei der, # params [: navn]."

Som du forventer, kan vi bruke alle de vanlige Ruby-metodene på variabelen, for eksempel .upcase, .omvendt etc.

 "Hei der # params [: name] .upcase."

Du kan angi ruten for å akseptere flere spørringsstrengvariabler som slik:

 få "/ hei /: navn /: by" gjør "Hei der # params [: navn] fra # params [: city]." slutt

I tillegg til normale variabler i en URL, tillater Sinatra å inkludere henting av wildcard-spørringsstrenger, kjent som en "splat", ved å bruke en stjerne slik:

 få '/ more / *' gjør params [: splat] end

Alt inkludert i nettadressen etter /mer/ vil være tilgjengelig gjennom : splat tast inn params matrise.


Se filer og POST

La oss nå gjøre noe litt mer interessant. La oss lage et skjema for å hente data fra brukeren, så gjør noe med det. Vi vil også gjøre bruk av en "visningsfil", som gjør at vi kan dele oppmerkningen for en visning i en egen fil. Legg til følgende rute til din basics.rb app-fil:

 få '/ form' do erb: skjema ende

Denne ruten vil laste inn form.erb ERB (Embedded Ruby) -fil fra a visninger / katalogen. ERB-filer er vanligvis vanlige HTML-filer som lar deg inkludere Ruby-kode innvendig koder, som blir analysert før de sendes til nettleseren - akkurat som hvordan du inkluderer PHP eller ASP-kode i en nettside.

Så opprett en visninger / katalog i samme mappe som basics.rb fil. Og inni visninger /, opprett filen som heter form.erb med følgende innhold inne:

 hei fra utsikten

Pek nettleseren din på http: // localhost: 9393 / skjema og du bør se meldingen vi satt i visningsfilen.

Nå vet vi at alt fungerer, endre innholdet til den filen til:

 

Oppdater siden, og du bør se skjemaet:

Men skriv inn en melding i tekstboksen og klikk på send-knappen, og du vil se Sinatras feilside, og informere oss om at det ikke finnes en rute for denne nettadressen.

Du lurer kanskje på hvorfor dette er, ser som skjemaet sender til / skjema, Den samme nettadressen skjemaet er på, så det burde ikke være et problem. Vel, forskjellen er at vi henter denne siden gjennom POST HTTP-metoden - og som du kan se på feilsiden Sinatra presenterer oss, krever Sinatra en annen rute for hver HTTP-metode.

Så legg til følgende rute til Sinatra-appen:

 post "/ form" gjør "Du sa" # params [: message] '"slutten

Denne ruten er for POST-metoden, ikke GET. Også alle POST-variabler er tilgjengelige i det samme params array som GET-variabler, slik at vi kan hente meldingen som ble sendt inn med skjemaet. Prøv det!


Du kan helt jobbe for MI5 nå!

Så hva neste? La oss lage en måte å "kryptere" en melding vi sender slik at den bare kan leses av vår tilsiktede mottaker. Legg til følgende rute til Sinatra-appen:

 få '/ hemmelig' gjør erb: hemmelig slutt

Du kommer sannsynligvis i gang med dette nå. Denne ruten vil laste inn ERB-visningsfilen på visninger / secret.erb. Lag den visningsfilen med følgende:

 

Super Secret MI5 Message Encryptor!

Og opprett ruten for POST-metoden:

 post '/ hemmelig' gjør params [: hemmelig] .revers ende

OK, så nå har vi en meldingskrypterer som bruker en spesiell 'omvendt' metode for å gjøre meldingen tilsynelatende ulæselig, vi trenger en måte å dekryptere meldingen på:

 få '/ dekryptere /: hemmelig' gjør params [: hemmelig] .revers ende

Der har du det! En superhemmelig, svært sikker meldingskrypterer som er god nok til et lands intelligensbyrå.

Juridisk ansvarsfraskrivelse: Når vi sier "svært sikker" og "kryptering", rekker vi faktisk bare bokstavene. Unnskyld.


FourOhFour?

En siste ting vi skal berøre er 404 feilsider. Akkurat nå hvis du går til en nettadresse som det ikke er en rute for (f.eks. / danisthebest), vil du se Sinatras fancy feilmelding. På en ekte app vil vi vise vår egen feil. For å gjøre dette, bruk bare ikke funnet rute, slik som:

 not_found gjør status 404 'ikke funnet' slutt

Her bruker vi Sinatras status metode for å angi HTTP-statuskoden til siden til 404 (du kan bruke samme metode for å angi statuskoden, for eksempel 201 når noe er opprettet eller 403 når en pålogging mislyktes).

Du kan videre refactor the ikke funnet rute ved hjelp av Sinatras stans metode:

 not_found stoppe 404, 'side ikke funnet' slutt

Konklusjon

Så du har utført din første duett med Sinatra! Forhåpentligvis kan du se hvor enkelt denne DSL gjør å lage webapps.

På neste spor lager vi en enkel "å-gjøre" app koblet til en SQLite-database. Vi vil også ta en titt på det unnvikende SETTE og SLETT HTTP metoder ingen har hørt om.

Merk: Du kan bla gjennom de endelige prosjektfilene for denne opplæringen på GitHub.