17

I'm looking for a plugin/act to allow versioning of my models. It's kind of difficult to find a list of the available solutions. So far I gathered:

  • acts_as_versioned
  • simply_versioned
  • vestal_versions

The last two solutions only require a single version table - this sounds nice, but I've got a bad feeling about how the ease of migrations will be affacted by this (because they serialize states as a string).

On the other hand, acts_as_versioned is a little bit dusty (last commit in January). Are there any recent experiences with any of these? Or other solutions (or forks) I might have overlooked?

Marcel Jackwerth
  • 53,948
  • 9
  • 74
  • 88
  • Questions like this are what Ruby Toolbox was created for: https://www.ruby-toolbox.com/categories/Active_Record_Versioning. As this question ages and gems come and go, Ruby Toolbox will remain a good resource to show consistent go-tos, up-and-coming alternatives, popularity and maintenance of various projects. All you need to make your decision! – Nathan Wallace Nov 20 '14 at 20:04

6 Answers6

21

Ive been working with a gem called "paper_trail". It seems to be the best solution online at the moment. It has auditing and version control in one.

http://github.com/airblade/paper_trail

Hope this helps!

Ryan
  • 399
  • 2
  • 6
4

I've worked with vestal_versions last week and yes, it is the most advanced alternative, at least in terms of space: you store just what you really need. It is an active project and the version 1.0 is going to be a huge update with many new features; just look at the 1.0 branch to know what I mean.

But after playing with it a bit, I've noticed a big flaw: performance. Every time you need an specific version, you have to go through all intermediate ones, reconstructing the version you need. This also means you cannot edit or delete a version directly, because it can mess with modifications, broking the chain. For do this, you need to process versions adequately, what vestal_versions currently does not do.

This way, for the problem I had, I ended up with my own versioning solution. I needed performance and the ability to delete and edit versions rapidly, so I sacrificed storage and developed something similiar to act_as_versioned.

BUT, if you don't need this and do not have to revert very frequently, I highly recommend vestal_versions. It is an advanced, solid solution and an active one, with a passionate developer behind it.

Lailson Bandeira
  • 754
  • 1
  • 7
  • 18
  • I took a look at all the solutions (paper trail, acts_as_audited) and finally chose to go the same way as Lailson - to develop yet another versioning plugin (sirlantis/historical at github, work in progress). – Marcel Jackwerth Nov 09 '09 at 22:27
  • Just to clarify: I did not build a library, I just make a custom solution for my problem. But good luck with the plugin. I see you did a lot of things really fast, with nice documentation. It looks promising… I'm interested on this matter and I'll keep watching your project. – Lailson Bandeira Nov 10 '09 at 02:44
2

A couple of months ago I tested a couple of solutions and vestal_versions was the most effective. There's also a great screencast here from Ryan Bates.

If you are looking for other alternatives, check out The Ruby Toolbox list.

s01ipsist
  • 3,022
  • 2
  • 32
  • 36
Simone Carletti
  • 173,507
  • 49
  • 363
  • 364
  • Indeed, it seems to be the most advanced one. Maybe I'm wrong about how it handles migrations, I'll do some tests. And thanks for the Toolbox link! – Marcel Jackwerth Nov 08 '09 at 22:50
2

We used acts_as_audited in a project, with quite a good success.

You can find that at http://github.com/collectiveidea/acts_as_audited/

(last commit in november :-) )

tal
  • 3,423
  • 1
  • 25
  • 21
1

Another plugin is paper_trail. Here is a link to the railscasts posted today:

http://railscasts.com/episodes/255-undo-with-paper-trail

He also mentions why he prefers paper_trail over vestal_versions

user496437
  • 58
  • 1
  • 5
0

Hey, I'm wondering if anyone has thought of using Perforce, GitHub, etc. on the backend INSTEAD of a database as a way to support versioning? So it would essentially be file-based retrieval of data, I guess...

Chuck Han
  • 594
  • 1
  • 6
  • 12
  • Actually, instead of "using p4, etc. INSTEAD of a database," how about versioning/branching the database using p4, etc. by having the Rails session direct the versioning. For example, I want to check out model v4.1 so before accessing data from the database, I check out that version of the database. If I want to branch, I first issue a branch command, then keep working. Thoughts? – Chuck Han Jan 21 '11 at 15:16