Cântând cu Sinatra

Bine ați venit la piesa 1 a "Cântă cu Sinatra". În această mini-serie vom lua o privire la Sinatra; un DSL mic, dar incredibil de puternic pentru crearea rapidă a aplicațiilor web Ruby. În această parte, vom începe cu Sinatra jucând în jur cu câteva căi, învățând cum să accesați parametrii URL și modul în care să efectuați datele POST între pagini.

Dacă nu ați mai lucrat cu Ruby înainte, ar trebui să verificați sesiunea Ruby for Newbies, unde Andrew vă va ghida prin procesul de instalare a Ruby pe sistemul dvs. și învățând elementele de bază ale limbii.

Primul lucru pe care trebuie să-l facem este să instalați Sinatra RubyGem. Introduceți următoarele în Terminal:

 gem instala sinatra

De asemenea, instalați bijuteria "shotgun", pe care o vom folosi ulterior:

 gem instalează pușcă

În funcție de modul în care ați instalat RubyGems pe sistemul dvs., este posibil să aveți nevoie să prefixați gem install comenzi cu sudo.


Foarte de bază

Deschideți editorul de text și creați un nou fișier numit basics.rb. Chiar în partea de sus trebuie să cerem RubyGems și bijuteria Sinatra:

 cereți "rubygems" necesită "sinatra"

Notă: Dacă rulați Ruby 1.9 (care ar trebui să fie;)), puteți renunța cereți "rubygems" line deoarece Ruby încarcă automat RubyGems oricum.

Să începem prin a crea clasicul "Hello World". Adăugați următoarele la dvs. basics.rb fișier de aplicație:

 obțineți "/" faceți "Bună ziua, lume!" Sfârșit

Aceasta este o ruta. Aici, îi spunem lui Sinatra că dacă adresa URL a locuinței sau a rădăcinii '/' este solicitat, folosind metoda GET HTTP normală, pentru a afișa "Bună ziua, lumea!"

Acum, în terminal, să pornim serverul tastând ruby basics.rb. Ni sa spus că Sinatra a "luat scena" pe portul 4567 și dacă mergem la http: // localhost: 4567 / într-un browser, vedem "Bună ziua, lumea!".

Deci, să încercăm o altă pagină:

 get '/ about' do 'Un pic despre mine.' Sfârșit

Ori de câte ori faceți o modificare a aplicației Sinatra, trebuie să reporniți serverul.

Aceasta înseamnă că dacă '/despre' URL-ul este solicitat (folosind metoda GET HTTP), "Un pic despre mine". va afișa.

Ori de câte ori faceți o modificare a aplicației Sinatra, trebuie să reporniți serverul. Deci, pentru a ne salva dificultatea de a opri și de a porni în mod constant serverul în timpul dezvoltării, vom folosi gemul Shotgun pe care l-am instalat mai devreme.

Opriți serverul curent Sinatra cu Ctrl-C. Acum putem fugi shotgun basics.rb și Shotgun va reporni automat serverul de fiecare dată când actualizăm pagina. Acest lucru este util atunci când facem o mulțime de activități de dezvoltare, dar pe măsură ce întreaga aplicație este reluată, poate fi lentă.

Pe măsură ce Shotgun asculta pe un port diferit, hai să ne mutăm la portul 9393 și să mergem la http: // localhost: 9393 / despre în browserul dvs. Ar trebui să vedeți fraza pe care am stabilit-o.


Accesarea parametrilor URL

De asemenea, puteți accesa parametrii de la adresa URL. Adăugați următoarele la dvs. basics.rb fişier:

 obține '/ hello /: name' params [: name] end

În acest exemplu, avem un traseu în care ceva după '/Salut/' va fi conținut într-un params array cu cheia :Nume. params array conține toate variabilele GET și POST. Dacă veniți dintr - un fundal PHP, acesta este similar cu $ _REQUEST gama globală.

În browser, mergeți la, de exemplu, http: // localhost: 9393 / Bună ziua / dan și ar trebui să vedeți numele afișat înapoi ("dan").

Ai putea încorpora :Nume într-un șir prin împachetarea în $ ? . Încercați să înlocuiți params [: nume] line cu:

 "Bună ziua, # params [: name]."

După cum v-ați aștepta, putem folosi toate metodele normale Ruby pe variabila, cum ar fi .upcase, .inversa etc.

 "Bună ziua, există # params [: name] .upcase."

Puteți seta ruta să accepte mai multe variabile de șir de interogări, cum ar fi:

 get '/ hello /: name /: city' do 'Hey there # params [: name] din # params [: city]. Sfârșit

Pe lângă variabilele normale într-o adresă URL, Sinatra vă permite să includeți șiruri de interogare de tip "wildcard", denumite "splat", folosind un asterisc ca acesta:

 obțineți "/ more / *" params [: splat] end

Orice conținut inclus în URL după /Mai Mult/ vor fi accesibile prin : bulină tastați în params mulțime.


Vizualizați fișierele & POST

Acum să facem ceva mai interesant. Să creați un formular pentru a prelua date de la utilizator, apoi faceți ceva cu el. De asemenea, vom folosi un "fișier de vizualizare", care ne permite să împărțim marcajul pentru o vizualizare într-un fișier separat. Adăugați următoarea rută la dvs. basics.rb fișier aplicație:

 obține "/ form" în erb: forma finală

Această rută va încărca form.erb Fișierul ERB (Embedded Ruby) de la vizualizari / director. Fișierele ERB sunt de obicei fișiere HTML normale care vă permit să includeți codul Ruby înăuntru , care vor fi analizate înainte de a fi trimise în browser - la fel cum includeți PHP sau codul ASP într-o pagină web.

Deci, creați un vizualizari / director în același director ca și basics.rb fişier. Și înăuntru vizualizari /, creați fișierul numit form.erb cu următorul conținut în interiorul:

 salut din vedere

Punctați browserul dvs. la http: // localhost: 9393 / formular și ar trebui să vedeți mesajul pe care l-am setat în fișierul de vizualizare.

Acum știm că totul funcționează, modificați conținutul acelui fișier la:

 

Actualizați pagina și ar trebui să vedeți formularul:

Dar, introduceți un mesaj în caseta de text și faceți clic pe butonul Trimiteți și veți vedea pagina de eroare a lui Sinatra, care ne va informa că nu există un traseu pentru această adresă URL.

S-ar putea să vă întrebați de ce este acest lucru, văzând cum se supune formularul /formă, aceeași adresă URL formularul este activat, deci nu ar trebui să existe o problemă. Diferența constă în faptul că preluăm această pagină prin metoda POST HTTP - și după cum puteți vedea pe pagina de eroare pe care Sinatra o prezintă, Sinatra necesită un traseu diferit pentru fiecare metodă HTTP.

Așa că adăugați următoarea rută la aplicația Sinatra:

 post "/ form" do "Ați spus" # params [: message] '' sfârșit

Acest traseu este pentru metoda POST, nu pentru GET. De asemenea, toate variabilele POST sunt disponibile în același params matrice ca variabile GET, pentru a putea prelua mesajul trimis împreună cu formularul. Încearcă!


Ați putea lucra complet pentru MI5 acum!

Deci ce urmează? Să creăm o modalitate de a "cripta" un mesaj pe care îl trimitem, astfel încât acesta să poată fi citit numai de destinatarul destinat. Adăugați următoarea rută la aplicația Sinatra:

 obține "/ secret" face erb: secret secret

Probabil că ți-ai prins asta. Acest traseu va încărca fișierul de vizualizare ERB la vizualizari / secret.erb. Creați acest fișier de vizualizare cu următoarele:

 

Super Secret MI5 Message Encryptor!

Și creați ruta pentru metoda POST:

 post "/ secret" nu params [: secret]. revers

OK, deci avem un encryptor de mesaje care utilizează o metodă specială "inversă" pentru a face mesajul aparent greu de citit, avem nevoie de o modalitate de a decripta mesajul:

 get '/ decrypt /: secret' nu paramuri [: secret] .versul final

Acolo îl ai! Un encryptor de mesaje extrem de secrete, foarte sigur pentru agenții de informații ale unei țări.

Aviz legal: Când spunem "foarte sigur" și "criptare", de fapt, inversăm doar literele. scuze.


FourOhFour?

Un ultim lucru pe care îl vom atinge este 404 de pagini de eroare. În momentul de față, dacă accesați o adresă URL pentru care nu există un traseu (de ex. / danisthebest), veți vedea mesajul de eroare fictiv al lui Sinatra. Pe o aplicație reală dorim să afișăm eroarea proprie. Pentru a face acest lucru, pur și simplu utilizați nu a fost gasit traseu, după cum urmează:

 not_found do status 404 'nu a fost găsit' sfârșit

Aici folosim Sinatra stare metodă pentru a seta codul de stare HTTP al paginii la 404 (ați putea folosi aceeași metodă pentru a seta orice cod de stare, cum ar fi 201 atunci când ceva este creat sau 403 când un login nu a reușit).

Ai putea refactora în continuare nu a fost gasit ruta prin utilizarea lui Sinatra oprire metodă:

 not_found stop 404, pagina "nu a fost găsită" sfârșit

Concluzie

Deci, ați interpretat primul dvs. duet cu Sinatra! Sperăm că puteți vedea cât de ușor acest DSL face crearea de aplicații web.

Pe următoarea pistă, vom crea o aplicație simplă "de a face" conectată la o bază de date SQLite. Vom analiza, de asemenea, evazivul A PUNE și DELETE HTTP metode pe care nimeni nu le-a auzit.

Notă: Puteți căuta fișierele finale de proiect pentru acest tutorial la GitHub.

Cod