2010-08-29 15 views
20

Per la mia prossima applicazione web, sto discutendo se utilizzare Rails 3.x o Sinatra.Rails 3 vs Sinatra

Vorrei utilizzare il server per fornire autenticazione utente, e-mail attivate dall'applicazione, un modello di dati abbastanza complesso (dietro ActiveRecord) e un'interfaccia dati JSON con il client web. Il lato client utilizzerà HTML statico, CSS statico, Javascript/jQuery per eseguire il rendering dei dati JSON nelle viste. La "politica" per il rendering delle viste sarà determinata dal codice Javascript e da alcuni dati JSON. Non ho intenzione di utilizzare alcuna tecnologia di visualizzazione dinamica come ERB, HAML o RJS.

Sarebbe meglio con Sinatra o Rails 3.x?

Ci sono altre domande che dovrei porre prima di prendere questa decisione?

risposta

26

Il modello di dati è abbastanza complesso, quindi immagino che la tua applicazione dovrà gestire un numero significativo di regole aziendali e possibilità di interazione.

Sinatra è pensato per la gestione di architetture software leggere. Se scegli Sinatra, probabilmente incontrerai problemi di progettazione e organizzazione che dovrai gestire da solo. Rails implementa il pattern MVC e può aiutarti a organizzare il tuo codice offrendo molti meccanismi utili.

È ancora possibile creare un'app Web "full stack" con Sinatra, ma dovrete fare molto da soli, soprattutto se la quantità di funzionalità che fornirete è alta (o crescerà). Penso che Rails si adatti naturalmente meglio alle architetture più grandi.

PS: ActiveRecord è disponibile sia in Sinatra che in Rails.

+0

Dato che userei ActiveRecord in entrambi i casi, perché fa la differenza? Dopotutto, ActiveRecord non ti consente di inserire regole aziendali nel livello del modello? Quale sarebbe lo stack MVC completo di Rails per le regole aziendali che Sinatra non possiede? –

+2

Ad esempio, in genere sono necessarie regole di convalida nel livello del modello (non fornite da AR). Ma il punto è più generale: in Rails ti metti in una struttura esistente. Segui le convenzioni e i modelli che assicurano che la tua app sarà facilmente mantenibile e scalerà bene. Sinatra ti aiuta solo nel routing e nel dispacciamento. In un'app di grandi dimensioni avrai bisogno di più: avrai bisogno di separare preoccupazioni e schemi di strutturazione. Ovviamente è possibile scrivere un framework su Sinatra per garantire questo, ma ci vuole tempo e avrà bug (come in ogni programma). (Puoi anche usare Padrino) – Antoine

0

Prima di decidere, è possibile dare un'occhiata allo other lightweight Ruby frameworks, il post è un po 'vecchio, ma probabilmente vale la pena eseguire una scansione.

1

Ho lo stesso compito di eseguire l'app per binari esistente che ora necessita di un'interfaccia JSON per dispositivi esterni (app per iPhone e Android). Consiglio vivamente di usare sinatra-activerecord in modo da poter includere tutti i tuoi modelli nella tua app sinatra. In questo modo non devi riscrivere la tua logica aziendale.

Caricare il modelli esistenti nella vostra applicazione Sinatra come segue: set: banca dati, URI.encode ("# {db_settings [ 'adattatore']}: // # {db_settings [ 'username']} @ # {db_settings [ 'host']}/# {db_settings [ 'database']}") richiedono './data/models/user.rb'

E db_settings sta caricando è impostazioni da database.yml (stesso formato di rotaie) usa la gemma yaml_db per quello;). In questo modo la tua app sinatra può riutilizzare tutti i modelli e persino i file di configurazione dall'app rails.

+0

Se hai intenzione di caricare i tuoi modelli di Rails esistenti in Sinatra, perché preoccuparsi? Perché non utilizzare Rails direttamente? Cosa guadagni andando con Sinatra? – kakubei

6

Sinatra sarebbe un'ottima scelta e credo che sarebbe meglio dei binari principalmente per una ragione. Questo è legato con quello che un altro utente ha scritto "Seguite le convenzioni ed i modelli che assicurano la vostra applicazione sarà facile manutenzione e scala bene.

Alcuni anni fa, abbiamo sviluppato una abbastanza grande applicazione nella rotaie. Tutti i nostri sviluppatori doveva fare una completa riscrittura perché il nucleo rotaie (leggi 37 segnali) non si preoccupano di fare la loro nuova versione compatibile. ad ogni aggiornare il codice si romperebbe.

Così la codifica in Rails non garantirà manutenibilità e scalabilità. Piuttosto il contrario.

In effetti la scalabilità sarà migliore su Sinatra in quanto è più leggera e si dovrebbe comunque utilizzare il passeggero per la distribuzione. La comunità di Sinatra è senza fronzoli ed estremamente utile. Non ci sono prime donne, grande ego allo stesso grado di Rails. E questo fa perché l'agenda di Rails potrebbe essere diversa dalla tua e potresti finire per riscrivere il codice molto presto. C'è un nuovo libro su Sinatra di O'Reilly che penso valga la pena dare un'occhiata dato che è pieno di esempi e idee su cosa può essere fatto e come.

1

Perché dovresti usare Rails per qualcosa? Hai bisogno di generatori di template?

Scrivere un'applicazione con Sinatra o solo Rack puro è semplice come in Rails e ottieni una velocità eccezionale per tutto ciò che fai.

Le app di Sinatra possono essere organizzate in qualsiasi modo e sono molto più flessibili di Rails, rendendola la scelta migliore indipendentemente dalla dimensione dell'applicazione.

Fare tutto in micro-servizi e aggiungere middleware personalizzato sembra molto più naturale con Sinatra e Rack.

Le persone che dicono che è per app o architetture minori non l'hanno usato abbastanza, non ho idea di chi abbia iniziato quel mito.