16

Sto cercando un plug-in/atto per consentire il controllo delle versioni dei miei modelli. È un po 'difficile trovare un elenco delle soluzioni disponibili. Finora ho raccolto:Versioning dei modelli in Ruby on Rails

  • acts_as_versioned
  • simply_versioned
  • vestal_versions

Le ultime due soluzioni richiedono una sola tabella versione - questo suona bello, ma ho una brutta sensazione su in che modo la facilità delle migrazioni verrà influenzata da questo (perché serializzano gli stati come una stringa).

D'altra parte, acts_as_versioned è un po 'polveroso (ultimo impegno in gennaio). Ci sono esperienze recenti con qualcuno di questi? O altre soluzioni (o forchette) che potrei aver trascurato?

+0

Domande come questa sono ciò che rubino Toolbox è stato creato per: https: //www.ruby- toolbox.com/categories/Active_Record_Versioning. Poiché questa domanda invecchia e gemma, Ruby Toolbox rimarrà una buona risorsa per mostrare go-to-go coerenti, alternative up-and-coming, popolarità e mantenimento di vari progetti. Tutto ciò che serve per prendere una decisione! –

risposta

4

Ho lavorato con vestal_versions la scorsa settimana e sì, è il più avanzato alternativa, almeno in termini di spazio: immagazzini solo ciò di cui hai veramente bisogno. È un progetto attivo e la versione 1.0 sarà un enorme aggiornamento con molte nuove funzionalità; basta guardare il ramo 1.0 per sapere cosa intendo.

Ma dopo aver giocato un po ', ho notato un grosso difetto: le prestazioni. Ogni volta che hai bisogno di una versione specifica, devi passare attraverso tutte quelle intermedie, ricostruendo la versione che ti serve. Ciò significa anche che non è possibile modificare o eliminare una versione direttamente, perché può compromettere le modifiche, interrompendo la catena. Per fare questo, è necessario elaborare le versioni in modo adeguato, cosa non fa attualmente vestal_versions.

In questo modo, per il problema che avevo, ho finito con la mia soluzione di versioning. Avevo bisogno delle prestazioni e della possibilità di eliminare e modificare rapidamente le versioni, quindi ho sacrificato lo spazio di archiviazione e sviluppato qualcosa di simile a act_as_versioned.

MA, se non è necessario e non è necessario ripristinare molto frequentemente, consiglio vivamente vestal_versions. È una soluzione avanzata, solida e attiva, con alle spalle uno sviluppatore appassionato.

+0

Ho dato un'occhiata a tutte le soluzioni (paper trail, act_as_audited) e alla fine ho scelto di andare allo stesso modo di Lailson - per sviluppare un altro plugin di versioning (sirlantis/storico su github, work in progress). –

+0

Giusto per chiarire: non ho costruito una libreria, ho solo creato una soluzione personalizzata per il mio problema. Ma buona fortuna con il plugin. Vedo che hai fatto un sacco di cose molto velocemente, con una buona documentazione. Sembra promettente ... Sono interessato a questo argomento e continuerò a guardare il tuo progetto. –

2

Un paio di mesi fa ho provato un paio di soluzioni e vestal_versions è stato il più efficace. C'è anche un great screencast here da Ryan Bates.

Se stai cercando altre alternative, controlla The Ruby Toolbox list.

+0

In effetti, sembra essere il più avanzato. Forse mi sbaglio su come gestisce le migrazioni, farò dei test. E grazie per il collegamento Toolbox! –

21

Ho lavorato con una gemma chiamata "paper_trail". Sembra essere la migliore soluzione online al momento. Ha controllo e controllo di versione in uno.

http://github.com/airblade/paper_trail

Spero che questo aiuti!

+0

Grazie per la risposta. Ho scelto di seguire anche la carta. – Mosselman

0

Ehi, mi chiedo se qualcuno abbia pensato di utilizzare Perforce, GitHub, ecc. Sul backend INSTEAD di un database come supporto per il controllo delle versioni?Quindi sarebbe essenzialmente il recupero di dati basato su file, immagino ...

+0

In realtà, invece di "usare p4, ecc. INSTEAD di un database," che ne dici di versionare/ramificare il database usando p4, ecc. Facendo sì che la sessione di Rails diriga il controllo delle versioni. Per esempio, voglio controllare il modello v4.1 quindi prima di accedere ai dati dal database, controllo quella versione del database. Se voglio diramarti, prima emetto un comando branch, quindi continuo a lavorare. Pensieri? –