16

Estoy buscando un complemento/acto para permitir el control de versiones de mis modelos. Es un poco difícil encontrar una lista de las soluciones disponibles. Hasta el momento deduje:Versiones de modelos en Ruby on Rails

  • acts_as_versioned
  • simply_versioned
  • vestal_versions

Las dos últimas soluciones sólo requieren una única tabla de versiones - esto suena bien, pero tengo un mal presentimiento sobre cómo la facilidad de las migraciones se verá afectada por esto (porque serializan los estados como una cadena).

Por otro lado, acts_as_versioned está un poco polvoriento (último compromiso en enero). ¿Hay alguna experiencia reciente con alguno de estos? ¿O otras soluciones (o tenedores) que podría haber pasado por alto?

+0

preguntas de este tipo son las que Rubí caja de herramientas fue creado para: https: //www.ruby- toolbox.com/categories/Active_Record_Versioning. A medida que envejece esta pregunta y las gemas van y vienen, Ruby Toolbox seguirá siendo un buen recurso para mostrar obsequios consistentes, alternativas prometedoras, popularidad y mantenimiento de varios proyectos. ¡Todo lo que necesitas para tomar tu decisión! –

Respuesta

4

He trabajado con vestal_versions semana pasada y sí, es la alternativa más avanzada, por lo menos en términos de espacio: usted almacena justo lo que realmente necesita. Es un proyecto activo y la versión 1.0 va a ser una gran actualización con muchas características nuevas; solo mira la rama 1.0 para saber a qué me refiero.

Pero después de jugar con él un poco, he notado un gran defecto: el rendimiento. Cada vez que necesita una versión específica, debe pasar por todas las intermedias para reconstruir la versión que necesita. Esto también significa que no puede editar o eliminar una versión directamente, ya que puede interferir con las modificaciones, rompiendo la cadena. Para hacer esto, necesita procesar las versiones adecuadamente, lo que vestal_versions actualmente no hace.

De esta manera, por el problema que tuve, terminé con mi propia solución de control de versiones. Necesitaba rendimiento y la capacidad de eliminar y editar versiones rápidamente, así que sacrifiqué el almacenamiento y desarrollé algo similar al act_as_versioned.

PERO, si no necesita esto y no tiene que revertir con mucha frecuencia, le recomiendo vestal_versions. Es una solución avanzada, sólida y activa, con un desarrollador apasionado detrás de ella.

+0

Eché un vistazo a todas las soluciones (paper trail, acts_as_audited) y finalmente elegí seguir el mismo camino que Lailson: desarrollar otro plugin de versiones (sirlantis/historical en github, work in progress). –

+0

Solo para aclarar: no construí una biblioteca, solo hice una solución personalizada para mi problema. Pero buena suerte con el complemento. Veo que hiciste muchas cosas realmente rápido, con buena documentación. Parece prometedor ... Estoy interesado en este asunto y seguiré viendo tu proyecto. –

2

Hace un par de semanas probé un par de soluciones y vestal_versions fue la más efectiva. También hay un great screencast here de Ryan Bates.

Si busca otras alternativas, consulte The Ruby Toolbox list.

+0

De hecho, parece ser el más avanzado. Tal vez estoy equivocado sobre cómo maneja las migraciones, haré algunas pruebas. ¡Y gracias por el enlace de Toolbox! –

21

He estado trabajando con una gema llamada "paper_trail". Parece ser la mejor solución en línea en este momento. Tiene auditoría y control de versiones en uno.

http://github.com/airblade/paper_trail

Espero que esto ayude!

+0

Gracias por su respuesta. También elegí ir con papel. – Mosselman

0

Oye, me pregunto si alguien ha pensado en usar Perforce, GitHub, etc. en el back-end de una base de datos como una forma de apoyar el control de versiones.Entonces, esencialmente sería una recuperación de datos basada en archivos, supongo ...

+0

En realidad, en lugar de "usar p4, etc. EN LUGAR de una base de datos," ¿qué hay de versionar/ramificar la base de datos usando p4, etc. haciendo que la sesión de Rails dirija el control de versiones? Por ejemplo, quiero verificar el modelo v4.1, así que antes de acceder a los datos de la base de datos, reviso esa versión de la base de datos. Si quiero realizar una bifurcación, primero emite un comando de bifurcación y luego sigo trabajando. ¿Pensamientos? –