Cum am cunoscut mojolicious, notele unui programator

Mojolicious (pronunțat "mojoliches") este un cadru web nou și în curs de dezvoltare. scris în Perl. Și nu a fost scris de nimeni, ci de Sebastian Riedel, unul dintre dezvoltatorii de Catalizatori. Recent, Mojolicious a devenit un subiect de discuție activă în comunitatea programatorilor Perl, așa că nu am putut încerca.







1. Ce scriu despre Mojolicious?

Dacă conduceți cuvântul Mojolicious în Google, puteți găsi următoarele recenzii:

După ce am citit toate acestea, nu am înțeles cel mai important lucru - ceea ce este atât de bun despre Mojolicious. că toată lumea vorbește despre el. Chiar am nevoie de ea, sau este doar zamochki cuiva despre arhitectura ideală a aplicației, codul perfect și TP? Și în cele din urmă, curiozitatea ma luat.

2. Instalarea și configurarea

Mojolicious poate fi furnizat din CPAN sau, dacă utilizați FreeBSD, din porturi. Apropo, în FreeBSD, acum interpretul standard Perl este 5.12, deoarece 5.10 nu mai este suportat. Nu uitați să faceți upgrade!

pkg_upgrade -o perl-5.12.3 perl-5.10.1_3
pkg_add -r p5-Mojolicious

Ce este frumos este faptul că cadrul nu atrage dependențe. Catalyst, după cum am auzit, trage pentru Moose. și aceasta este o mulțime de pachete. Apoi, am creat primul meu proiect:

/ proiecte / mojolicious / test_app /
CD

/ proiecte / mojolicious / test_app /
mojo genera aplicația TestApp

A apărut următoarea structură de directoare:

lib - codul este stocat aici
jurnalele de log - uri sunt scrise aici
fișiere publice - statice (css, js, imagini)
script - nucleul lui Mojolieses
t - toate testele
tempaltes - șabloane de pagini

De asemenea, a fost creat un cod, care poate fi verificat imediat în acțiune. Aplicația noastră poate funcționa sub Apache sau Nginx. dar în timpul depanării este mai convenabil să utilizați serverul web Mojoliches încorporat:

/ test_app / script / test_app daemon - restart

În mod implicit, serverul asculta pe portul 3000.

Dacă doriți să știți opinia mea, serverul web încorporat este nenorocit. Nu mai trebuie să fiți perverși prin ridicarea Apache-ului local. Sau pentru a scrie cod în VIM printr-o conexiune SSH. Nu, VIM + SSH este, de asemenea, bun. Atâta timp cât Internetul este bine. Ei bine, sau deocamdată este necesar să faceți doar editări mici.

Am avut o singură problemă cu serverul web încorporat. În Windows (Windows 7 + Strawberry Perl), cheia --restart nu funcționează din anumite motive. Ca urmare, serverul trebuie repornit manual după efectuarea modificărilor codului.

Addition: În versiunile noi de Mojolicious, cheia -restart a fost eliminată. În schimb, se recomandă utilizarea serverului morbo:

scriptul morbo / test_app

Cum se utilizează Mojolicious în modul CGI, FastCGI și PSGI, puteți citi în Mojolicious :: Guides :: Cookbook. Totul este destul de simplu. De exemplu, fixarea la Apache în modul CGI se face într-o singură linie în httpd.conf:

ScriptAlias ​​/ test_app "/ cale / către / script / test_app"

... și echipa ...

cd / usr / local / www / apache22 / date /
chown -R eax: www. / test_app
chmod -Rg + rx. / test_app

... a corectat situația. Ca totul funcționează. Cu toate acestea, dacă vă uitați la jurnalele de aplicații, se pare că ceva nu funcționează corect:

Pentru a scapa de aceste mesaje este foarte simplu - adăugați următoarele în ./test_app/lib/TestApp.pm:

# Această metodă se numește o dată când serverul este pornit
sub pornire # 123;
eu $ = schimbare;

# CE ESTE FĂCUT:
Fraza de acces secret poate fi obținută folosind pwgen -s 16
$ self -> secret # 40; '* pOpRTm; M<;5?fk

3. Traseele și argumentele de manipulare

După ce am fumat ușor documentația, am înțeles mai mult sau mai puțin principiul general al cadrului. De exemplu, pentru a adăuga o nouă pagină pe site-ul nostru, trebuie să adăugați următoarele în metoda TestApp :: startup ():







# pentru pagina / exemplul-pagină / cerută de metoda GET:
$ r -> traseu # 40; '/ exemplu-pagină /' # 41; -> via # 40; 'Get' # 41; -> pentru # 40; "example-page #index" # 41; ;

# pentru aceeași pagină cerută de metoda POST:
# -> prin ('post') -> la ('exemplu-pagină # rezultat');

# dacă metoda nu este importantă:
# $ r-> traseu ('/ example-page /') -> to ('exemplu-pagină # rezultat');

Apoi, creați test_app / lib / TestApp / Example / Page.pm:

pachet TestApp. Exemplu. Pagina;
utilizați Mojo. Baza "Mojolicious :: Controller";

# exemplu-pagină de ieșire
sub index # 123;
meu # 40; $ singur # 41; = @_;

# Am vrut cu adevărat să scriu despre posibilitatea înregistrării,
# dar nu știu unde să pună această linie de cod :)
$ self -> app -> log -> depanare # 40; "randare / exemplu-pagină /." # 41; ;

$ self -> render # 40; var1 => '123'. var2 => '456' # 41; ;
# 125;

După cum puteți vedea, există o legătură cu rutele:

$ r -> traseu # 40; '/ pagina-nume /' # 41; -> pentru # 40; Metoda "class-name #" # 41; ;

Numele paginilor pot fi, desigur, oricare. Dacă doriți să obțineți argumentele transmise de utilizator, aceasta se face astfel:

# obțineți numele tuturor parametrilor:
numele meu @name = $ self -> param;

# obține parametrul după numele său:
valoarea mea $ = $ self -> param # 40; „Nume“ # 41; ;

# obține parametrul trecut prin metoda GET:
valoarea mea $ = $ auto -> req -> query_params -> param # 40; „Nume“ # 41; ;

# obține parametrul trecut prin metoda POST:
valoarea mea $ = $ self -> req -> body_params -> param # 40; „Nume“ # 41; ;

Detalii privind procesarea cererilor pot fi găsite aici.

4. Pregătirea șabloanelor

Pagina este aproape gata, rămâne doar să se facă un șablon pentru aceasta. Pentru a face acest lucru, creați un șablon de fișier / example / page / index.html.ep:

% aspect "implicit";
% title 'Preveed!';

Aceasta este o pagină de test.
Variabila var1 = <% = $var1 %>. și var2 = <% = $var2 %> .
Du-te la acasă .

Prima linie definește aspectul (vezi șabloanele / planurile /). Următorul este definiția titlului paginii și a codului paginii efective. După cum puteți vedea, numele șablonului conține numele clasei și metoda acesteia. "Html" din titlul șablonului pare să indice formatul în care dăm datele. În același director, puteți crea un fișier index.json.ep sau index.xml.ep pentru a afișa datele în formatele corespunzătoare.

5. Teste de scriere

Apoi, am scris un test pentru pagina nou creată. Acest lucru nu este necesar, dar simplifică foarte mult viața, atunci când de la client se începe EXTREMEL să preia creația. Testele se asigură că nimic nu se schimbă când site-ul se schimbă. Și da, știu că TDD implică scrierea de teste înainte de a scrie codul, dar acum lucrez în acest cadru și nu lucrez la un proiect real. Deci, fișierul t / example-page.t:

utilizați stricte;
utilizați testul. mai mult;
utilizați testul. Mojo;

testul meu $ t =. Mojo -> nou # 40; app => 'TestApp' # 41; ;
$ t -> get_ok # 40; '/ exemplu-pagină /' # 41; ;
$ t -> status_is # 40; 200 # 41; ;
$ t -> content_type_is # 40; 'text / html; charset = UTF-8' # 41; ;
$ t -> content_like # 40; qr #




Trimiteți-le prietenilor: