Cum se construiește un App Shortlink cu Ruby și Redis

În acest tutorial, vom construi o aplicație rapidă web rapidă cu Ruby, cadrul web Sinatra și baza de date Redis. Prin încheierea acestui tutorial, veți termina cu un webapp mortal simplu, de înaltă performanță, care este foarte ușor de scalabil.


Pasul 1. Începeți

Pentru a urmări împreună cu acest tutorial, veți avea nevoie de Ruby instalat pe sistemul dvs. (utilizez 1.9.2), precum și Frank Sinatra și Redis pietre prețioase și Redis.

Dacă nu aveți deja instalat Ruby pe sistemul dvs., atunci ar trebui să îl puteți instala relativ ușor. Utilizatorii OS X, Debian sau CentOS ar putea fi nevoiți să compileze o versiune mai nouă a Ruby. Este un proces destul de simplu.

Consultați aici pentru a afla cum să instalați Ruby, prin RVM.

Acum va trebui să instalați Ruby Gems necesare. Pietrele sunt o modalitate convenabilă de a instala aproape orice bibliotecă Ruby disponibilă. Pur și simplu tastați următoarele în fereastra terminalului pentru a instala pietrele necesare:

 gem instala sinatra redis

Va trebui să instalați și să compilați Redis. Nu vă faceți griji, este foarte mic și durează doar aproximativ 15 secunde pentru a se compila pe mașina mea.

 wget http://redis.googlecode.com/files/redis-2.0.4.tar.gz tar zfx redis-2.0.4.tar.gz cd redis-2.0.4 face sudo make install cd? 

Puteți rula serverul Redis tastând Redis-server în terminalul tău și dacă vrei să te joci cu Redis, da Redis-cli în urmă.


Pasul 2. Construirea aplicației

Unul dintre cele mai mari lucruri despre Sinatra este cât de rapid și ușor face să biciuiți aplicații simple - este aproape prostească!

Codul pentru aplicația shortlink în sine nu va fi foarte lung, așa că ar trebui să fie foarte ușor de înțeles. Nu vă faceți griji dacă nu o înțelegeți la început, vă voi explica cum funcționează în curând.

Faceți un dosar pentru webapp - am sunat-o pe a mea Redis-rubin-Shortlink - și puneți următoarele fișiere în el.

shortlink_app.rb

 cereți 'sinatra' necesită 'redis' redis = Redis.new helpers nu includ Rack :: Utils alias_method: h,: escape_html def random_string (lungime) rand (36 ** lungime) .to_s (36) end end get '/' erb: index end end '/' face dacă paramale [: url] și nu params [: url] .empty? @shortcode = random_string 5 redis.setnx "link-uri: # @ shortcode", paramuri [: url] end erb: index end get '/: shortcode' do @url = redis.get "link: # params [: shortcode ] "redirecționare @url || '/' Sfârșit

Asta e. Destul de simplu, eh?

În acea mică aplicație Sinatra de mai sus, am făcut câteva lucruri-cheie. În primele două rânduri, aduc bibliotecile de care avem nevoie - Frank Sinatra și redis. Pe linia 4, am stabilit o conexiune la serverul Redis, ascultând pe localhost. Linile după acest lucru sunt în cazul în care totul începe să devină interesant!

În Sinatra, puteți specifica ajutoare care sunt executate de fiecare dată când unul dintre dvs. rute (acestea obține și post piese). Putem pune tot ce am putea avea nevoie de multe ori în blocul ajutoarelor. În blocatorii mei, am aliat h la Rack's escape_html, și a definit o metodă de generare a unui șir aleatoriu alfanumeric cu o anumită lungime.

Următoarele sunt rute. Prima rută este destul de simplă. Ori de câte ori un client face o cerere GET /, doar redă index.erb (am inclus sursa în continuare).

Următoarea rută este locul în care se întâmplă lucrurile bune. În primul rând, ne asigurăm că utilizatorul a tastat de fapt o adresă URL în caseta URL. Dacă da, vom genera un scurtcod aleator de cinci caractere lungi prin apelarea random_string metoda pe care am definit-o inainte. Apoi, îi spunem lui Redis setnx (A stabilit dacă n eXists), o cheie care reprezintă codul nostru scurt la adresa URL. Redis este foarte rapid și simplu cheie / valoare de date, sau a NoSQL Bază de date. Aceste baze de date sunt concepute pentru operațiuni de căutare cu adevărat greu de tip cheie / valoare și, dat fiind faptul că scot majoritatea complexității SQL, pot face acest lucru mult mai repede. Partea "link-uri:" nu este strict necesară, dar este o practică bună să vă împărțiți cheile Redis namespace deci dacă decideți mai târziu să stocați mai multe informații în aceeași bază de date, nu trebuie să vă faceți griji în legătură cu ciocnirile. După toate acestea, facem același lucru index.erb ca și înainte. Observați că dacă utilizatorul nu introduce nimic, această rută are același lucru cu ruta anterioară.

Traseul final este rulat atunci când un client vizitează un scurt link. Această rută introduce ceea ce se numește a Parametrul URL. De exemplu, atunci când un client vizitează / foobar, :cod scurt o parte din traseu se potrivește cu "foobar". Putem accesa parametrii URL în același mod ca orice alt parametru - params hash. Căutăm codul scurt în baza de date Redis. Dacă nu există o cheie precum cea pe care încercăm să o accesăm, Redis se va întoarce zero. Următoarea linie redirecționează fie URL-ul pe care l-am scos din Redis (dacă există), fie redirecționează către pagina de pornire, dacă nu.

vizualizari / index.erb

index.erb este cel mai mult plictisitor marcaj, deși are câteva linii pe care aș dori să le subliniez. ERB standuri pentru încorporat Ruby, și ne permite să amestecăm Ruby și HTML, așa cum ați face cu PHP.

    Aplicație shortlink    

aplicație shortlink

<% if @shortcode %>
Adresa dvs. scurtă este: "> http://my-shortlink-app.com/<%= @shortcode %>
<% end %>

O diferență între erb și PHP pe care ați observat deja (în afară de limbile diferite) este aceea în care folosește PHP și , erb utilizează <% și . Singurele lucruri interesante despre index.erb este blocul if, care redă doar partea din pagină care arată legătura scurtă dacă este @cod scurt este definită variabila. Acest lucru ne permite să folosim aceeași vedere pentru tot. Un alt punct de reținut este că ne-am asigurat că vom scăpa de HTML params [: url], astfel încât să nu fim victime ale unui atac XSS. Altele decât acele puncte, este, în esență, o pagină web standard de stoc.


Pasul 3. Scalarea în sus

Un lucru pe care l-am menționat pe scurt în introducerea acestui tutorial este cât de ușor putem scala, mulțumită lui Redis. Dacă scalarea în mai multe baze de date SQL este o aventură complicată, redimensionarea Redis este de fapt destul de banală. Acesta este un rezultat direct al simplității lui Redis. Dacă trebuie să scalați la mai multe Redises, adăugați următoarele la configurația Redis:

 slaveof master-redis-server.my-shortlink-app.com 6379

Odată ce ați instalat mai mulți sclavi, este o mică modificare a aplicației Sinatra de mai sus pentru a face fiecare instanță Sinatra să se conecteze la un server Redis aleatoriu (dacă sunteți în stadiul în care trebuie să scalați Redis, o să presupun că deja a trebuit să desfășurați mai multe instanțe Sinatra.;)


Concluzie

Sper că acest tutorial s-a dovedit a fi util pentru dvs., indiferent dacă vreți să rulați propriul serviciu de scurtături sau pur și simplu sunteți interesat de cele mai recente tehnologii de ultimă oră disponibile pentru dezvoltatorii noștri web. Am acoperit niște software destul de curat în acest tutorial, care a fost incredibil de util nu numai pentru mine, ci și pentru mii de alți dezvoltatori acolo. Bucurați-vă de tinkering!

Cod