16

Ich bin auf der Suche nach einem Plugin/Act, um die Versionierung meiner Modelle zu ermöglichen. Es ist schwierig, eine Liste der verfügbaren Lösungen zu finden. Bisher habe ich gesammelt:Versionierung von Modellen in Ruby on Rails

  • acts_as_versioned
  • simply_versioned
  • vestal_versions

Die letzten beiden Lösungen nur eine einzige Version Tabelle benötigen - das klingt gut, aber ich habe ein schlechtes Gefühl bekommt über wie die Leichtigkeit von Migrationen dadurch bewirkt wird (weil sie Zustände als eine Zeichenkette serialisieren).

Auf der anderen Seite ist acts_as_versioned ein bisschen staubig (letzten Commit im Januar). Gibt es in letzter Zeit irgendwelche Erfahrungen mit diesen? Oder andere Lösungen (oder Gabeln), die ich übersehen hätte?

+0

Fragen wie diese sind, was Ruby-Toolbox wurde erstellt: https: //www.ruby- toolbox.com/categories/Active_Record_Versioning. Wenn diese Frage altert und Edelsteine ​​kommen und gehen, wird Ruby Toolbox eine gute Ressource bleiben, um konsistente Go-To, aufstrebende Alternativen, Popularität und Wartung verschiedener Projekte zu zeigen. Alles was Sie brauchen, um Ihre Entscheidung zu treffen! –

Antwort

4

ich mit vestal_versions letzte Woche gearbeitet habe und ja, es ist die fortschrittlichste Alternative, zumindest in Bezug auf die Platz: Sie speichern genau das, was Sie wirklich brauchen. Es ist ein aktives Projekt und die Version 1.0 wird ein riesiges Update mit vielen neuen Funktionen sein; Schau einfach in den 1.0 Zweig, um zu wissen, was ich meine.

Aber nachdem ich ein bisschen damit gespielt habe, habe ich einen großen Fehler bemerkt: Leistung. Jedes Mal, wenn Sie eine bestimmte Version benötigen, müssen Sie alle Zwischenversionen durchgehen, um die Version zu rekonstruieren, die Sie benötigen. Dies bedeutet auch, dass Sie eine Version nicht direkt bearbeiten oder löschen können, da sie mit Änderungen verwechseln und die Kette durchbrechen kann. Dazu müssen Sie Versionen angemessen verarbeiten, was vestal_versions derzeit nicht tut.

Auf diese Weise, für das Problem, das ich hatte, endete ich mit meiner eigenen Versionierungslösung. Ich benötigte Leistung und die Fähigkeit, Versionen schnell zu löschen und zu bearbeiten, also opferte ich Speicher und entwickelte etwas, das act_as_versioned ähnlich ist.

ABER, wenn Sie dieses nicht benötigen und nicht sehr häufig zurückgehen müssen, empfehle ich vestal_versions. Es ist eine fortschrittliche, solide Lösung und eine aktive, mit einem leidenschaftlichen Entwickler dahinter.

+0

Ich habe mir alle Lösungen angeschaut (Paper-Trail, acts_as_audited) und habe mich letztendlich für Lailson entschieden - um ein weiteres Versionierungs-Plugin zu entwickeln (sirlantis/historical at github, work in progress). –

+0

Nur um zu verdeutlichen: Ich habe keine Bibliothek erstellt, sondern nur eine benutzerdefinierte Lösung für mein Problem. Aber viel Glück mit dem Plugin. Ich sehe, dass du eine Menge Dinge wirklich schnell gemacht hast, mit schöner Dokumentation. Es sieht vielversprechend aus ... Ich bin an dieser Sache interessiert und werde Ihr Projekt weiter beobachten. –

2

Vor ein paar Monaten habe ich ein paar Lösungen getestet und vestal_versions war am effektivsten. Es gibt auch eine great screencast here von Ryan Bates.

Wenn Sie nach anderen Alternativen suchen, besuchen Sie The Ruby Toolbox list.

+0

Tatsächlich scheint es der am weitesten fortgeschrittene zu sein. Vielleicht irre ich mich, wie es mit Migrationen umgeht, ich werde ein paar Tests machen. Und danke für den Toolbox-Link! –

21

Ich habe mit einem Juwel namens "Paper_trail" gearbeitet. Es scheint im Moment die beste Online-Lösung zu sein. Es hat Auditing und Versionskontrolle in einem.

http://github.com/airblade/paper_trail

hoffe, das hilft!

+0

Danke für Ihre Antwort. Ich habe mich entschieden, auch mit Papierspur zu gehen. – Mosselman

0

Hey, ich frage mich, ob jemand daran gedacht hat, Perforce, GitHub, etc. auf dem Backend INSTEAD einer Datenbank zu verwenden, um die Versionierung zu unterstützen?So würde es im Wesentlichen Datei-basierte Abfrage von Daten sein, denke ich ...

+0

Eigentlich, anstatt "p4, etc. anstelle einer Datenbank zu verwenden", wie wäre es mit der Versionierung/Verzweigung der Datenbank mit p4, etc., indem die Rails-Sitzung die Versionierung steuert. Ich möchte zum Beispiel das Modell v4.1 auschecken, also prüfe ich diese Version der Datenbank, bevor ich auf Daten von der Datenbank zugreife. Wenn ich verzweigen möchte, gebe ich zuerst einen Verzweigungsbefehl aus und arbeite weiter. Gedanken? –