De ce Rails?

Alegerea dvs., atunci când învățați un nou cadru, este una incredibil de importantă. Este nevoie de nenumărate ore și eforturi pentru a deveni expert și pentru a afla cele mai bune practici - chiar și pentru dezvoltatorii cu experiență.

De aceea este necesar să înțelegeți cât mai curând posibil particularitățile unui cadru, pentru a determina dacă este soluția potrivită pentru problema pe care încercați să o rezolvați. În acest articol, voi acoperi multe dintre domeniile cheie ale cadrului Ruby on Rails și de ce simt că este o alegere excelentă pentru dezvoltatorii web.


Unele istorii

Ruby on Rails a fost extras din aplicația de management de proiect, Basecamp.

Ruby on Rails a fost deschisă în 2004, de David Heinemeier Hannson, după ce a fost extras din aplicația de management de proiect, Basecamp.

Se bazează pe limbajul de programare Ruby, iar versiunea actuală stabilă este de 3,2 - cu 4,0 chiar la colț!

RoR este un pachet complet de aplicații web; începând cu versiunea 3.1, include facilități și biblioteci pentru a gestiona codul frontend, susținând Sass și CoffeeScript din cutie, fără a fi nevoie de un instrument extern pentru a gestiona procesul de compilare. Fluxul de lucru vizat este numele jocului cu Rails.

Pentru dezvoltare, acesta încorporează propriul server web, astfel încât să nu aveți nevoie să instalați software suplimentar în afară de o instalare Ruby care funcționează.


De ce să înveți asta?

Există nenumărate motive pentru învățarea Rails, variind de la tehnică la afacere și productivitate. Vom aborda fiecare câte unul.

Tehnologie

Ruby a fost conceput pentru a fi o "bucurie de a folosi".

După cum sugerează și numele, Rails se bazează pe limba Ruby. Inventat în 1993 și lansat pentru prima dată în 1995 de Yukihiro Matsumoto (cunoscut sub numele de "Matz"), Ruby este un limbaj interpretat orientat pe obiecte care prezintă o sintaxă puternic inspirată de Perl și Lisp. De la înființare, Ruby a fost proiectat să fie o "bucurie de utilizare" - adică un accent puternic pe lizibilitate și eleganță.

Fiind un limbaj de nivel mai înalt, Ruby este extrem de puternic și versatil, păstrând în același timp un echilibru bun de claritate și performanță (având în vedere faptul că este încă un limbaj interpretat și dinamic).

Traductorul original Ruby (Interpretul lui Ruby din Matz, scurtat ca IRM) este scris în C, dar nu este singurul disponibil în zilele noastre (câteva alternative notabile sunt JRuby, care rulează pe partea de sus a JVM și Rubinius).

Ruby include mai multe biblioteci livrate cu nucleul său, inclusiv o unitate foarte puternică de testare, numită Minitest (înainte de Ruby 1.9, Ruby folosit TestUnit).

Rails este o modalitate populară de a se implica în Ruby, deci nu este rară acum să găsim oameni (inclusiv mine), a căror primă introducere la Ruby a fost prin Rails.

Aflați fundamentele Ruby cu Tuts + Premium.

Structura

Rails este puternic constient, atunci când vine vorba de decizii arhitecturale

Rails este un cadru MVC bazat pe baze de date agnostic care alege convenția asupra configurației, ceea ce înseamnă că este puternic apreciat, atunci când vine vorba de decizii arhitecturale, convenții de denumire, căi și modele.

In detaliu:

  • MVC înseamnă că urmează paradigma Model-View-Controller, astfel încât să puteți separa în mod clar preocupările atunci când dezvoltați o aplicație. Acest lucru vă permite ca logica dvs. de bază să fie într-un singur loc, evitând duplicarea și asistând la întreținere.

  • Urmează o abordare REST, orientată spre resurse, ceea ce înseamnă că vă încurajează să vă gândiți la logica dvs. de afaceri din punctul de vedere al datelor, expunând resurse la obiective care efectuează acțiuni CRUD. De exemplu, conectarea la un site poate fi văzută ca "crearea unei sesiuni"; logare ca "distrugerea unei sesiuni". Această abordare are nevoie de ceva obișnuit, dar odată ce ați adoptat această mentalitate, vă ajută la menținerea interfețelor coerente și previzibile de către alți dezvoltatori. Aplicațiile rails tind să se rotească în jurul modelelor, care gestionează persistența datelor.

  • Folosește Bundler ca instrument de gestionare a dependenței, exercitând puterea comunității Rubygems. Aceasta asigură o abordare consecventă pentru adăugarea unei aplicații la o terță parte, cu un format explicit care detaliază care biblioteci de care avem nevoie și ce versiuni, inclusiv rezolvarea dependențelor imbricate.

  • Acesta poate suporta o gamă largă de baze de date, cu SQLite ca implicit (bun pentru dezvoltare) și MysQL și PostgreSQL ca primele alegeri pentru producție. MongoDB poate fi, de asemenea, integrat cu un efort minim.

  • Convenția înseamnă că denumirea, căile și modelele sunt de obicei previzibile și împărtășite între dezvoltatorii Rails. Aceasta asigură o curbă mai ușoară de învățare, axată pe logica de afaceri pentru aplicație, o întreținere mai ușoară și o mai mică documentație.

  • Este ușor de testat, cu instrumente care se integrează cu cadrul de testare și integrare a unităților (cu suport JavaScript). În plus, comunitatea Ruby, în sine, susține cu tărie dezvoltarea testată, astfel încât un bun dezvoltator de Rails este probabil destul de experimentat în testare.

  • O aplicație Rails poate fi implementată cu ușurință în infrastructurile cloud, cum ar fi Heroku, sau direct către servere private (rulează excelent pe Ubuntu Linux, de exemplu).

Caracteristici de baza

Iată o descriere de bază a ceea ce poate face Rails din cutie, împreună cu câteva exemple de cod. Rețineți că, chiar dacă nu ați lucrat niciodată cu Rails înainte sau chiar nu știți Ruby, acest lucru nu ar trebui să vă împiedice să le înțelegeți, deoarece acestea sunt destul de ușor de citit.

  • Sprijin pentru definirea modelului de date prin migrații, adică instrucțiuni agnostice ale bazei de date repetabile și reversibile, care manipulează structura bazei de date. Luați în considerare migrarea următoare:

    clasă CreateEvents < ActiveRecord::Migration def change create_table :events do |t| t.string :title t.date :start_date t.date :end_date t.boolean :live, :default => falsul t.timestamps sfârșitul sfârșitul final

    Această migrare creează o evenimente tabel, cu unele date de bază, cum ar fi titlu, și utilizează tipuri specifice de date care sunt mapate la anumite tipuri de coloane din baza de date de bază. De exemplu, implicit, şir utilizează a VARCHAR (255) coloana, dacă folosiți MySQL. Această migrare poate fi scrisă manual de la zero sau generată din linia de comandă și apoi editată înainte de a fi rulată.

  • Interfață model de bază de date agnostic pentru acțiuni CRUD. Iată câteva exemple, date fiind a Știri model:

    news = News.new (titlu: "Șablonul de știri") # => returnează o instanță de știri, nu este salvată în baza de date news.save # => execută o interogare inserare și actualizează instanța cu idul returnat din baza de date news.title = "Știri actualizate" # => stabilește titlul la noua valoare fără salvarea în baza de date news.save # => rulează o interogare de actualizare pentru acel element news.destroy # => rulează o interogare de ștergere pentru elementul respectiv

    În plus, Rails furnizează o interfață simplă pentru a efectua interogări de selecție, inclusiv conectări între modele.

    (5) # => produce 'SELECT * din știri unde publicate = 1 comanda de create_at DESC limită 5'
  • Suport pentru validări; un Eveniment modelul poate necesita întotdeauna prezența unui titlu unic. În acest caz, este posibil să se exprime în mod clar aceste cerințe în Eveniment clasă:

    clasă Eveniment < ActiveRecord::Base validates :title, :presence => adevărat,: unicitatea => sfârșitul adevărat

    Această funcționalitate asigură că nici o înregistrare nevalidă nu este salvată în baza de date și oferă, de asemenea, toate legăturile necesare pentru a afișa utilizatorilor erori de validare (de exemplu într-o formă).

  • Sesiunea și cookie-urile cu ajutorul ajutoarelor simple pentru a seta valori, a le obține și a le șterge, cu semnătura transparentă.

  • Protecția împotriva falsului de formă, astfel încât orice formă pe care o generați prin Rails să fie semnată automat cu un simbol care să-i garanteze cu adevărat.

  • Politica de protecție XSS agresivă este activată în mod prestabilit, astfel încât orice element de formă pe care îl utilizați să fie protejat în mod prestabilit, cu excepția cazului în care l-ați lăsat în mod explicit pe listă albă (atenți atunci când faceți asta!).

  • Gestionare simplă pentru OBȚINE și POST date, accesibile printr-un simplu hash disponibil în fiecare acțiune a controlerului.

  • Legare simplă pentru a conecta controlerele, modelele și vizualizările, cu reguli clare și convenționale care simplifică gestionarea și codul de fișiere. De exemplu, luați în considerare următorul controler care este responsabil pentru redarea unei pagini de știri la http://example.com/news:

    clasa NewsController < ApplicationController def index end end

    Chiar și fără a scrie orice cod pentru a defini ce index nu, Rails oferă un comportament implicit, care este de a face app / opinii / stiri / index.html.erb vedere. Acest lucru reduce nevoia de cod de boilerplate, deoarece, de cele mai multe ori, este doar necesar să se deplaseze comportamentul, atunci când neconvențional.

  • Integrarea cu servicii externe; Rails oferă un ecosistem bogat de aplicații pe care le puteți utiliza pentru a monitoriza, menține și îmbunătăți aplicația dvs. (unele dintre ele lucrează și cu alte cadre). Noul Relic ajută la monitorizarea performanței, AirBrake Bug Tracker colectează excepții pentru a anunța echipa de dezvoltare, Code Climate analizează codul dvs. pentru calitate, complexitate și dublare, Tddium și TravisCI pot rula suita de testare de la distanță împotriva diferitelor versiuni Ruby.

  • După cum sa menționat anterior, Rails oferă de asemenea un mediu integrat pentru a lucra cu Coffeescript și Sass, cu o compilație transparentă în dezvoltarea și preprocesarea și cache-ul pentru implementare, astfel încât aplicația dvs. de producție să difuzeze fișiere single, miniaturi cu o semnătură în numele fișierului. În acest fel, puteți fi sigur că orice browser va încărca întotdeauna și va arhiva cea mai recentă versiune a fișierului.


Valoarea afacerii

Te-ai întrebat vreodată de ce Rails este prima alegere a numeroaselor companii de pornire? Există două motive principale:

  • Acesta vă permite să lucrați cu funcții cu un minim de boilerplate, eliminând o mulțime de activități non-business legate de procesul de dezvoltare. Acest lucru se traduce printr-o viteză sporită în dezvoltarea și implementarea de noi caracteristici, care este esențială pentru a înțelege dacă produsul este solid.

  • Structura Rails ușurează adaptarea schimbării. Acest lucru este valabil cu siguranță pentru multe cadre MVC, deși Rails este deosebit de bun pentru restructurarea fluxului de aplicații, reutilizarea componentelor într-un mod simplu.

Este important să rețineți că, în mod frecvent, timpul de dezvoltare este mai costisitor decât un server suplimentar.

Există întotdeauna o conversație în curs de desfășurare despre performanța Rails și cum poate deveni un obstacol atunci când obțineți mii de hit-uri pe minut. Problema este că ajungerea la acel nivel de trafic necesită un efort enorm. Adevărul este: de 9 ori din 10, scalabilitatea este o problemă pe care multe companii nu trebuie niciodată să o facă față. Pentru ei, abilitatea de a face schimbări, ușor de întreținut și previzibilitate sunt mult mai valoroase.

În plus, este important să rețineți că, frecvent, timpul de dezvoltare este mai costisitor decât un server suplimentar. Un cadru ca Rails este adesea preferat, deoarece, chiar dacă ar putea avea nevoie de hardware mai puternic, este în continuare rentabil în alte domenii.

Acest lucru nu înseamnă că nu vă interesează performanța codului dvs. sau vă faceți griji cu privire la subiecte, cum ar fi cache-ul și optimizarea interogărilor. În schimb, aceasta înseamnă luarea în considerare a întregului spectru de modificări hardware și software pe care le puteți face; uneori, este sensibil să se prezinte o bucată de lucru concentrată pe performanță și să aveți temporar un hardware mai puternic pentru a continua să lucrați la caracteristici importante.


Extinderea cadrului

Șinele pot fi ușor extinse cu o mare varietate de biblioteci externe, distribuite prin Rubygems. De cele mai multe ori, orice caracteristică pe care trebuie să o construiți este deja oferită printr-o bijuterie. Acum, acest lucru nu înseamnă că adăugarea pietrelor este soluția perfectă; fiecare dependență terță parte pe care o adăugați la o aplicație devine un factor de risc.

Uneori, este preferabil să vă derulați propria versiune cu cod personalizat.

Acestea fiind spuse, nu ar trebui să reinventezi roata. Multe aplicații Rails utilizează aceleași pietre pentru a oferi caracteristici specifice; acest lucru poate fi văzut ca un avantaj. Amintiți-vă: utilizarea pe scară largă se traduce la testare largă, deci este considerat o practică sigură de a utiliza anumite pietre prețioase pentru a îndeplini sarcinile-cheie. Iată câteva exemple:

  • Devize, pentru înscrierea, logarea și gestionarea utilizatorilor
  • Forma simplă, pentru generarea de formare ușoară și personalizabilă
  • Kaminari, pentru paginare
  • ActiveAdmin, pentru pagini rapide de administrare

Această listă ar putea merge cu ușurință, dar punctul este acela că Rails folosește modularitatea unei abordări bazate pe Rubygems și poate accelera foarte mult dezvoltarea, punând accentul pe caracteristicile clădirii care contează pentru produsul pe care lucrați, în locul cazanului.


De ce mă bucur de lucru cu șine

Mă pot concentra pe ceea ce contează pentru clienți, fără a compromite calitatea bunelor coduri.

Aproximativ doi ani în urmă, lucram într-un rol de marketing / management de produs (realizarea de dezvoltare web ca un hobby); care a însemnat focalizarea pe caracteristicile produselor, valoarea lor de afaceri și costul asociat dezvoltării lor. Când am decis să-mi schimb cariera, Rails 3.0 tocmai a fost eliberat. Am petrecut o după-amiază vizionând videoclipuri și citind tutoriale. Am hotărât repede că Rails a fost ceea ce am vrut să-și concentreze eforturile.

Motivul - și acest lucru oarecum se suprapune cu ceea ce am discutat deja - este că am putut vedea o abordare practică în framemork, un obiectiv clar de a fi productiv și de a se concentra asupra produsului și a dezvoltării acestuia. Am putut face lucrurile într-un timp scurt. După câteva luni de auto-antrenament intensiv prin diverse tutoriale web și câteva aplicații de probă, am aplicat pentru postul meu curent ca dezvoltator Rails la New Bamboo.

Îmi place să lucrez în fiecare zi cu Rails, pentru că mă pot concentra pe ceea ce contează pentru clienți, fără a compromite calitatea bunelor coduri. Pentru mine, este punctul de plecare perfect pentru majoritatea aplicațiilor bazate pe web.

Nu rezolvă toate problemele pe care le veți întâlni atunci când construiți aplicații web mari. Există momente când veți vedea în mod clar că Rails nu este potrivit pentru un anumit tip de serviciu, dar este timpul să împărțiți arhitectura în aplicații mai mici.


Concluzie

Rails este un cadru puternic care vă poate ajuta să deveniți mai productivi și mai încrezători atunci când lucrați la proiecte complexe. Acest lucru este posibil, datorită convențiilor sale puternice și structurii solide. Companiile mari, cum ar fi 37 de semnale, laboratoarele pivotale, Groupon (sau chiar Twitter pe vremuri) au ales Rails ca arhitectură de bază pentru aplicațiile lor de bază. Există un motiv pentru asta!

Sunteți gata să începeți călătoarea Ruby on Rails?

Cod