# Maintaining Multiple Versions of App

**URL:** <https://www.ruby-forum.com/t/maintaining-multiple-versions-of-app/107845>\
**Category:** Rails\
**Created:** [June 26, 2007, 8:47pm UTC](https://www.ruby-forum.com/t/maintaining-multiple-versions-of-app/107845 "2007-06-26T20:47:15Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![scottbrisko](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/aca169/32.png) [@scottbrisko](https://www.ruby-forum.com/u/scottbrisko)\
**Post date:** [June 26, 2007, 8:47pm UTC](https://www.ruby-forum.com/t/maintaining-multiple-versions-of-app/107845/1 "2007-06-26T20:47:15Z")

</div>

I’m working on a major Rails project who’s code base continues to grow.  
The  
client wants to have two different versions of the software, with some  
features in common between the two, and some features diverging. I’m  
trying  
to figure out the best strategy for easily maintaining the features the  
two  
have in common, while allowing for differences as well.

Ideas:

- Subversion “branches”, doing diffs and merging to maintain  
commonality  
between both. (Seems like a nightmare.)

- One codebase, w/ configuration settings and if/else statements  
depending  
on which version is running. (Also seems like a nightmare.) For example,  
the  
following type statements littered throughout the code:

- Rails plugins and modules. Seems like the best way, but I’m not sure  
the  
best way to structure it. Differences will be mostly minor, but at all  
levels (views, controllers, models emails)

Any feedback or shared experiences would be great.

Thanks,

–  
Scott B.  
Electro Interactive, Inc.  
Blog: [http://synthesis.sbecker.net](http://synthesis.sbecker.net)

---

<div class="post-metadata">

**Author:** ![scottbrisko](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/aca169/32.png) [@scottbrisko](https://www.ruby-forum.com/u/scottbrisko)\
**Post date:** [June 26, 2007, 11:50pm UTC](https://www.ruby-forum.com/t/maintaining-multiple-versions-of-app/107845/2 "2007-06-26T23:50:42Z")

</div>

SVN branches is one way…

another way is to use SVN Externals to manage the common code between  
many  
apps.

Another option is to move common models, etc into plugins which can be  
shared.

---

<div class="post-metadata">

**Author:** ![scottbrisko](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/aca169/32.png) [@scottbrisko](https://www.ruby-forum.com/u/scottbrisko)\
**Post date:** [June 27, 2007, 2:16pm UTC](https://www.ruby-forum.com/t/maintaining-multiple-versions-of-app/107845/3 "2007-06-27T14:16:55Z")

</div>

Another option is Engines: [http://rails-engines.org/](http://rails-engines.org/)
