2010-10-21 12 views
60

Ho lavorato su alcuni degli esempi di Sinatra e Rails, ma mi viene difficile capire quali funzioni appartengono a quale tecnologia.Sinatra vs. Rails

Che cosa guadagno in particolare utilizzando Sinatra/Rails? È solo ActionPack/ActionView? Correggimi se sbaglio, ma potrei usare solo Webrick/Mongrel e servire i miei file .erb giusto? E potrei usare la tecnologia ActiveRecord in quei file e accedere ancora alle variabili post, allo stato di sessione e alle variabili di querystring giusto?

Quindi, quello che sto chiedendo ragazzi è, se inizio con lo scenario simile a PHP sopra; Webrick + ERB + ActiveRecord, cosa guadagno usando Sinatra? E cosa guadagno ulteriormente usando Rails?

risposta

60

Per Sinatra, è quasi come un involucro attorno a Rack. Quindi prima devi chiedere qual è il punto di Rack. Rack è fondamentalmente una specifica per come un framework dovrebbe restituire un risultato, può usare ciò che viene restituito con qualsiasi server web supportato da Rack. Quindi è davvero un livello di compatibilità che ti permette di scegliere la combinazione quadro/server a piacimento, senza preoccuparti di lavorare insieme. Se il tuo framework è compatibile con Rack, dovresti essere in grado di distribuire praticamente su qualsiasi server tramite Rack.

Ora, il fatto è Rack è di livello molto basso. Framework come Sinatra offrono cose come routing, helpers, filtri prima/dopo e molto altro. Devi solo guardare i documenti per vedere cosa puoi ottenere. Rails è molto più funzionale e in molti modi "magico". Cioè, potresti scrivere una singola riga in Rails che finisce per fare parecchio, che per alcuni è una cosa buona, e per alcuni troppo magica. Personalmente preferisco Sinatra per questo motivo, almeno prima di ottenere una comprensione decente degli interni di Rails.

+1

Grazie per le informazioni. Ecco una domanda di follow-up: se non avessi Rails o Sinatra, come potrei fare solo usando Webrick per servire alcuni file ERB? Presumo che sia possibile utilizzare solo i comandi ruby ​​per avviare il webrick su una determinata porta e puntarlo in una determinata directory? – LoveMeSomeCode

+3

Ho solo cercato su google "webrick", 3 ° risultato: http://microjet.ath.cx/webrickguide/html/ - e anche questo: http://segment7.net/projects/ruby/WEBrick/servlets.html – ehsanul

+1

I non capisco perché vuoi preoccuparti di tutto questo, anche se onestamente, sembra piuttosto inutile, e Webrick non è esattamente il miglior server. Puoi semplicemente utilizzare il routing degli URL di Sinatra come interfaccia per ERB se è tutto ciò che desideri. Puoi ignorare tutte le altre funzionalità o usarle in seguito, se lo desideri. Hai visto il mondo Ciao per Sinatra? Super semplice (e le linee di codice non cambierebbero se si volesse fare riferimento a un file ERB anziché solo alla stringa): http: // http: //www.sinatrarb.com/ – ehsanul

5

Il guadagno di Rails è ActionView/ActionPack. Ma puoi semplicemente sostituire con Mongrel/Erb. È qualcosa di diverso

È tutto più leggero che hai nella tua vista come name_route o gestione degli errori nel modulo. È tutta la gestione delle risorse e tutti i plugin come InheritedResources. Il vantaggio di Rails.

Ci sono alcuni strumenti come l'ambiente Padrino per aiutarti ad avere tutto questo aiuto. Ma è davvero più veloce dopo l'attivazione di tutti i plugin? Io non la penso così

Con Rails 3, Rails è un'applicazione rack completa con un sacco di RackMiddleware. Puoi semplicemente abbandonare alcuni middleware per aumentare la tua risposta.