2013-08-08 14 views
9

Sto creando un JSON-only application, è fondamentalmente un Rails più snello, con meno middleware e meno moduli. Questa è un'applicazione in corso su Rails 4.Come mantenere DRY con ActiveAdmin o RailsAdmin, separato dall'applicazione principale

Voglio sviluppare una semplice app che possa amministrare i dati nel database per l'app principale. Per questo mi piacerebbe usare Active Admin o Rails Admin. Ma entrambe le opzioni usano in qualche modo i modelli sottostanti e le loro convalide, i requisiti e tali da costruire in cima.

Ciò significa che devo condividere almeno i modelli tra l'applicazione principale e l'applicazione RailsAdmin.

Come farei meglio a fare questo? C'è una buona guida su come costruire un'applicazione di amministrazione in un'app separata per i binari accanto a quella principale, invece di averla integrata?

Come nota a margine: un altro buon motivo per mantenere l'amministratore in un'applicazione separata dall'app principale, ma su un database condiviso, è la miriade di dipendenze, un gioiello come ActiveAdmin.

Si noti inoltre che non sono semplicemente interessato a eseguire l'amministrazione su un dominio diverso o su un server diverso, ma soprattutto per mantenere l'app principale snella e focalizzata. E per mantenere le dipendenze con cui qualcosa come ActiveAdmin arriva, dalla mia app principale.


note a piè pagina:

  • Né ActiveAdmin né RailsAdmin sono problemi per la prestazione in se stessi. È che richiedono il middleware, mentre una app Rail solo JSON richiede solo pochi moduli, helper e middleware! Rails-API, offre uno stack così sottile. Le prestazioni non riguardano Admin vs. no admin, ma Full-Rails vs Rails-API.
  • Le prestazioni non sono il mio problema principale, le dipendenze e lo spessore sono! Ora ho un'applicazione Rails così sottile, mirata e snella, che può misurarsi con la maggior parte delle app Sinatra :). Con solo tre gemme aggiuntive (ognuna con alcune dipendenze proprie) e una pila molto sottile di middleware, posso aggiornare, gestire ed eseguire il debug molto facilmente.

Più pratico: Io Non avere Devise (E 'un JSON-API, così token autenticato), non hanno eventuali pareri o modello-motore. No Formtastic, No Paperclip, Rmagic, Kminari (cercapersone) e così via e così via. Tutto ciò verrà aggiunto alla mia app quando inserisco "solo un amministratore".

+2

Vorrei esaminare l'estrazione delle classi del modello in una gemma che potreste richiedere in entrambe le app. Temo di non poter offrire un consiglio specifico, in quanto non l'ho mai fatto, ma in teoria dovrebbe funzionare. Devi condividere il database.file yml in qualche modo, o semplicemente assicurarsi che rimanga aggiornato in entrambi i posti. –

+0

Grazie per il suggerimento. Questo, in effetti, suona come un'ottima soluzione per me. – berkes

risposta

1

avete misurato l'impatto dell'aggiunta di strumenti come ActiveAdmin alla velocità della vostra API di riposo? in caso contrario, mi sembra un caso di ottimizzazione prematura.

nel caso in cui la velocità dell'API abbia davvero un impatto da parte di una libreria che viene caricata ma non utilizzata, è possibile creare più applicazioni e condividere i modelli in un sottomodulo git.

+0

Sì, l'ho fatto, anche se approssimativo e molto poco scientifico :). L'aggiunta dello stack completo dei rails raddoppia quasi la quantità di memoria in uso. Quadruplica il tempo di avvio (per lo più irrilevante per la produzione) e rende (molte) le risposte fino a tre volte più lente. Ma, come ho detto, avere tutte le dipendenze presenti in realtà è più un problema. Ho avuto diverse app che si interrompono sugli aggiornamenti a causa dell'incompatibilità con ad es. la versione jQuery di cui ActiveAdmin ha bisogno o l'uploader di cui RailsAdmin ha bisogno. – berkes

+0

Trovo abbastanza interessante, che tu abbia più lenti risposte in produzione quando usi un amministratore. hai visto da dove viene questo? ma come ho già scritto e anche Zach ha fatto notare, condividi i tuoi modelli tramite un sottomodulo git o una gemma. bundler è molto utile con questo. – phoet

+0

phoet e altri: ho aggiunto alcune note a piè di pagina per rendere un po 'più chiaro i miei punti di vista sulle prestazioni. – berkes