Perché le rotaie?

La tua scelta, quando apprendi un nuovo quadro, è incredibilmente importante. Occorrono innumerevoli ore e sforzi per diventare abili e imparare tutte le migliori pratiche, anche per sviluppatori esperti.

Ecco perché è necessario comprendere le peculiarità di un framework il prima possibile, al fine di determinare se è la soluzione giusta per il problema che stai cercando di risolvere. In questo articolo, tratterò molte delle aree chiave del framework Ruby on Rails e perché ritengo che sia una scelta eccellente per gli sviluppatori web.


Un po 'di storia

Ruby on Rails è stato estratto dall'applicazione di gestione del progetto, Basecamp.

Ruby on Rails è stato open source nel 2004, da David Heinemeier Hannson, dopo essere stato estratto dall'applicazione di gestione del progetto, Basecamp.

È basato sul linguaggio di programmazione Ruby e l'attuale versione stabile è 3.2, con 4.0 proprio dietro l'angolo!

RoR è uno stack di applicazioni Web completo; a partire dalla versione 3.1, include anche strutture e librerie per gestire il codice frontend, supportando Sass e CoffeeScript out of the box, senza necessità di tool esterni per gestire il processo di compilazione. Il flusso di lavoro definito è il nome del gioco con Rails.

Per lo sviluppo, incorpora il proprio server Web, in modo che non sia necessario installare software extra oltre all'installazione di Ruby funzionante.


Perché impararlo?

Ci sono innumerevoli motivi per imparare Rails, che vanno dal tecnico al business e alla produttività. Affronteremo ciascuno uno per uno.

Tecnologia

Ruby è stato progettato per essere una "gioia da usare".

Come suggerisce il nome, Rails è basato sul linguaggio Ruby. Inventato nel 1993 e pubblicato per la prima volta nel 1995 da Yukihiro Matsumoto (ampiamente conosciuto semplicemente come "Matz"), Ruby è un linguaggio interpretato orientato agli oggetti che presenta una sintassi fortemente ispirata a Perl e Lisp. Fin dal suo inizio, Ruby è stato progettato per essere un "joy to use", il che significa una forte attenzione alla leggibilità e all'eleganza.

Essendo un linguaggio di livello superiore, Ruby è estremamente potente e versatile, pur mantenendo un buon equilibrio tra chiarezza e prestazioni (tenendo presente che è ancora un linguaggio interpretato e dinamico).

L'interprete originale di Ruby (Matz's Ruby Interpreter, accorciato come MRI) è scritto in C, ma non è l'unico disponibile al giorno d'oggi (un paio di alternative importanti sono JRuby, in esecuzione sulla JVM e Rubinius).

Ruby presenta diverse librerie fornite con il suo core, tra cui un'unità molto potente che ne testa una, chiamata Minitest (prima di Ruby 1.9, Ruby usava TestUnit).

Rails è un modo popolare per entrare in contatto con Ruby, quindi non è raro al giorno d'oggi trovare persone (incluso me stesso) la cui prima introduzione a Ruby sia stata tramite Rails.

Impara i fondamenti di Ruby con Tuts + Premium.

Struttura

Rails è fortemente motivato, quando si tratta di decisioni architettoniche

Rails è un framework MVC indipendente dal database che sceglie la convenzione sulla configurazione, il che significa che è fortemente convinto, quando si tratta di decisioni architetturali, convenzioni di denominazione, percorsi e modelli.

Più in dettaglio:

  • MVC significa che segue il paradigma Model-View-Controller, in modo che tu possa chiaramente separare le preoccupazioni durante lo sviluppo di un'applicazione. Ciò consente alla logica aziendale principale di essere in un unico posto, evitando duplicazioni e assistenza per la manutenzione.

  • Segue un approccio RESTful, orientato alle risorse, il che significa che ti incoraggia a pensare alla tua logica aziendale dal punto di vista dei dati, esponendo le risorse agli endpoint che eseguono azioni CRUD. Ad esempio, l'accesso a un sito può essere visto come "creazione di una sessione"; disconnettersi come "distruggere una sessione". Questo approccio richiede un po 'di tempo per abituarsi, ma una volta adottata questa mentalità, aiuta a mantenere le interfacce coerenti e prevedibili da parte di altri sviluppatori. Le applicazioni dei binari tendono a ruotare attorno ai modelli, che gestiscono la persistenza dei dati.

  • Utilizza Bundler come strumento di gestione delle dipendenze, sfruttando il potere della comunità Rubygems. Ciò garantisce un approccio coerente per l'aggiunta di funzionalità di terze parti a un'applicazione, con un formato esplicito che specifica le librerie di cui abbiamo bisogno e le versioni, inclusa la risoluzione delle dipendenze nidificate.

  • Può supportare una vasta gamma di database, con SQLite come predefinito (valido per lo sviluppo) e MysQL e PostgreSQL come prime scelte per la produzione. MongoDB può anche essere integrato con il minimo sforzo.

  • Convenzione significa che la denominazione, i percorsi e i modelli sono solitamente prevedibili e condivisi tra gli sviluppatori di Rails. Ciò garantisce una curva di apprendimento più semplice, incentrata sulla logica di business per l'app, manutenzione più semplice e meno documentazione.

  • È facile da testare, con strumenti che si integrano con il framework per il testing e l'integrazione delle unità (con supporto JavaScript). Inoltre, la comunità di Ruby, a sua volta, sostiene fortemente lo sviluppo basato sui test, quindi un buon sviluppatore di Rails è probabilmente abbastanza esperto nei test.

  • Un'applicazione Rails può essere facilmente implementata in infrastrutture cloud, come Heroku, o direttamente su server privati ​​(ad esempio, funziona perfettamente su Ubuntu Linux).

Caratteristiche principali

Ecco un riepilogo di base di ciò che Rails può fare fuori dalla scatola, insieme ad alcuni esempi di codice. Tieni presente che, anche se non hai mai lavorato con Rails prima o addirittura non conosci Ruby, questo non dovrebbe impedirti di comprenderli, in quanto sono abbastanza leggibili.

  • Supporto per la definizione del modello di dati tramite migrazioni, ad esempio istruzioni agnostiche di database ripetibili e reversibili, che manipolano la struttura del database. Considera la seguente migrazione:

    classe 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 => false t.timestamps end end end

    Questa migrazione crea un eventi tabella, con alcuni dati di base, come a titolo, e utilizza tipi di dati specifici che sono associati a tipi di colonna specifici nel database sottostante. Ad esempio, per impostazione predefinita, stringa usa a VARCHAR (255) colonna, se si utilizza MySQL. Questa migrazione può essere scritta manualmente da zero o generata dalla riga di comando e quindi modificata prima dell'esecuzione.

  • Interfaccia modello agnostico del database per azioni CRUD. Ecco alcuni esempi, dati a notizia modello:

    news = News.new (titolo: 'Sample news') # => restituisce un'istanza news, non salvata nel database news.save # => esegue una query insert e aggiorna l'istanza con l'ID restituito dal database news.title = 'News di esempio aggiornate' # => imposta il titolo sul nuovo valore, senza salvare nel database news.save # => esegue una query di aggiornamento per quell'elemento news.destroy # => esegue una query di eliminazione per quell'elemento

    Inoltre, Rails fornisce un'interfaccia semplice per eseguire query di selezione, inclusi i join tra i modelli.

    News.where (pubblicato: true) .order ('created_at DESC'). Limit (5) # => produce 'SELECT * dalle news dove pubblicato = 1 ordine di created_at DESC limite 5'
  • Supporto per convalide; un Evento il modello può sempre richiedere la presenza di un titolo unico. In tal caso, è possibile esprimere chiaramente questi requisiti in Evento classe:

    Evento di classe < ActiveRecord::Base validates :title, :presence => vero,: unicità => vera fine

    Questa funzionalità garantisce che nessun record non valido sia salvato nel database e fornisce anche tutti i collegamenti necessari per visualizzare gli errori di convalida all'utente (ad esempio in un modulo).

  • Sessione e cookie con semplici helper per impostare i valori, ottenerli ed eliminarli, con firma trasparente.

  • Protezione contro la falsificazione di moduli, in modo che qualsiasi modulo generato tramite Rails venga automaticamente firmato con un token che ne garantisce la genuinità.

  • Politica di protezione XSS aggressiva abilitata per impostazione predefinita, in modo tale che qualsiasi elemento del modulo che utilizzi sia protetto per impostazione predefinita, a meno che tu non lo autorizzi esplicitamente (attenzione quando lo fai!).

  • Gestione semplice per OTTENERE e INVIARE dati, accessibili tramite un semplice hash disponibile in ogni azione del controller.

  • Semplici collegamenti per collegare controller, modelli e viste, con regole chiare e convenzionali che semplificano la gestione e il codice dei file. Ad esempio, si consideri il seguente controller che è responsabile del rendering di una pagina di elenco di notizie su http://example.com/news:

    class NewsController < ApplicationController def index end end

    Anche senza scrivere alcun codice per definire cosa indice fa, Rails fornisce un comportamento predefinito, che è quello di rendere il app / views / news / index.html.erb vista. Questo riduce la necessità di codice di codice, poiché, la maggior parte delle volte, è solo necessario ignorare il comportamento, quando non convenzionale.

  • Integrazione con servizi esterni; Rails offre un ricco ecosistema di applicazioni che è possibile utilizzare per monitorare, mantenere e migliorare l'applicazione (alcune di esse funzionano anche con altri framework). New Relic aiuta a monitorare le prestazioni, Airbrake Bug Tracker raccoglie le eccezioni per informare il team di sviluppo, Code Climate analizza il codice base per qualità, complessità e duplicazione, Tddium e TravisCI possono eseguire la tua suite di test da remoto contro diverse versioni di Ruby.

  • Come notato in precedenza, Rails offre anche un ambiente integrato per lavorare con Coffeescript e Sass, con una compilazione trasparente in sviluppo e pre-elaborazione e busting della cache per la distribuzione, in modo che l'app di produzione serva singoli file minificati con una firma nel nome file. In questo modo, puoi essere assolutamente sicuro che qualsiasi browser caricherà e memorizzerà sempre l'ultima versione del file.


Valore aziendale

Ti sei mai chiesto perché Rails è la prima scelta di molte web startup? Ci sono due ragioni principali:

  • Ti consente di lavorare sulle funzionalità con un numero minimo di regole, rimuovendo un sacco di lavoro non correlato al business dal processo di sviluppo. Ciò si traduce in maggiore velocità nello sviluppo e nella distribuzione di nuove funzionalità, che è fondamentale per capire se il prodotto è solido.

  • La struttura delle rotaie facilita il cambio. Questo è certamente vero per molti framework MVC, anche se Rails è particolarmente adatto a ristrutturare il flusso delle applicazioni, riutilizzando i componenti in modo semplice.

È importante ricordare che, spesso, i tempi di sviluppo sono più costosi di un server extra.

C'è sempre una conversazione in corso sulle prestazioni di Rails e su come può diventare un collo di bottiglia quando si ottengono migliaia di accessi al minuto. Il problema è che arrivare a quel livello di traffico richiede uno sforzo enorme. La verità è: 9 volte su 10, la scalabilità è un problema che molte aziende non devono mai affrontare. Per loro, la possibilità di apportare modifiche, facilità di manutenzione e prevedibilità sono molto più preziose.

Inoltre, è importante ricordare che, spesso, i tempi di sviluppo sono più costosi di un server extra. Un framework come Rails è spesso preferito, perché, anche se potrebbe richiedere un hardware più potente, è ancora conveniente in altre aree.

Ciò non significa che non dovresti preoccuparti delle prestazioni del tuo codice o preoccuparti degli argomenti, come la memorizzazione nella cache e l'ottimizzazione delle query. Invece, significa prendere in considerazione l'intera gamma di modifiche hardware e software che è possibile apportare; a volte, è sensato posporre un pezzo di lavoro orientato al rendimento e avere temporaneamente un hardware più potente per continuare a lavorare su funzionalità importanti.


Estendere il quadro

I binari possono essere facilmente estesi con un'ampia varietà di librerie esterne, distribuite tramite Rubygems. La maggior parte delle volte, qualsiasi funzione che è necessario creare è già offerta attraverso una gemma. Ora, questo non significa che l'aggiunta di gemme sia la soluzione perfetta; ogni dipendenza di terze parti aggiunta a un'applicazione diventa un fattore di rischio.

A volte, è preferibile eseguire il rollover della propria versione con codice personalizzato.

Detto questo, non dovresti reinventare la ruota. Molte applicazioni Rails utilizzano le stesse gemme per fornire funzionalità specifiche; questo può essere visto come un vantaggio. Ricorda: l'ampio utilizzo si traduce in test approfonditi, quindi è considerato un metodo sicuro utilizzare determinate gemme ben conosciute per svolgere compiti chiave. Ecco alcuni esempi:

  • Elabora, per la registrazione degli utenti, il login e la gestione
  • Forma semplice, per una generazione di markup della forma facile e personalizzabile
  • Kaminari, per impaginazione
  • ActiveAdmin, per pagine di amministrazione rapide

Questo elenco potrebbe facilmente andare avanti, ma il punto è che Rails sfrutta la modularità di un approccio basato su Rubygems e può velocizzare enormemente lo sviluppo, concentrandosi sulla costruzione di funzionalità che contano per il prodotto su cui stai lavorando, invece che su boilerplate.


Perché mi piace lavorare con le guide

Posso concentrarmi su ciò che conta per i clienti senza compromettere la buona qualità del codice.

Circa due anni fa, stavo lavorando in un ruolo di marketing / gestione del prodotto (facendo lo sviluppo web come hobby); ciò significava concentrarsi sulle funzionalità dei prodotti, sul loro valore aziendale e sui costi associati al loro sviluppo. Quando ho deciso di cambiare carriera, Rails 3.0 era appena stato rilasciato. Ho passato un pomeriggio a guardare video e a leggere tutorial. Ho subito deciso che Rails era ciò su cui volevo concentrare i miei sforzi.

Il motivo - e questo in qualche modo si sovrappone a quello che abbiamo già discusso - è che potrei vedere un approccio pratico nel framemork, un chiaro obiettivo per essere produttivi e concentrarsi sul prodotto e sul suo sviluppo. Potrei fare le cose in un breve lasso di tempo. Dopo alcuni mesi di intensa auto-formazione attraverso vari tutorial web e alcune applicazioni di esempio, ho fatto domanda per il mio attuale lavoro come sviluppatore di Rails presso New Bamboo.

Mi piace lavorare con Rails ogni giorno, perché posso concentrarmi su ciò che conta per i clienti senza compromettere la buona qualità del codice. Per me, è il punto di partenza perfetto per la maggior parte delle applicazioni basate sul web.

Non risolve tutti i problemi che incontrerai quando costruisci applicazioni web di grandi dimensioni. Ci sono volte in cui si vede chiaramente che Rails non è adatto per un tipo specifico di servizio, ma è il momento di dividere l'architettura in applicazioni più piccole.


Conclusione

Rails è un potente framework che può aiutarti a diventare più produttivo e sicuro quando lavori su progetti complessi. Questo è possibile, grazie alle sue forti convenzioni e alla solida struttura. Le grandi aziende, come 37 Signals, Pivotal Labs, Groupon (o anche Twitter ai vecchi tempi) hanno scelto Rails come architettura di base per le loro applicazioni principali. C'è una ragione per cui!

Pronto per iniziare a guidare Ruby on Rails?