# How to share a collection of model files across many apps?

**URL:** <https://www.ruby-forum.com/t/how-to-share-a-collection-of-model-files-across-many-apps/89895>\
**Category:** Ruby\
**Created:** [March 23, 2007, 4:24pm UTC](https://www.ruby-forum.com/t/how-to-share-a-collection-of-model-files-across-many-apps/89895 "2007-03-23T16:24:25Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![eblatt](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/7bcc69/32.png) [@eblatt](https://www.ruby-forum.com/u/eblatt)\
**Post date:** [March 23, 2007, 4:24pm UTC](https://www.ruby-forum.com/t/how-to-share-a-collection-of-model-files-across-many-apps/89895/1 "2007-03-23T16:24:25Z")

</div>

Hi,

I’ve got three files that (a.rb, b.rb, c.rb) that currently live in  
app/models.  
I’d like these models to shared by multiple rails apps. These models are  
associated with a separate database.

My rails projects are contained in a directory that looks like this:

projects/

proj1/ proj2/ proj3/ common/

common/  
a.rb b.rb c.rb

My idea is to do this:

In proj1/lib/, symlink to …/…/common/

lib/  
common/ (which is a symlink)

My question is:  
How do I tell rails to load the files pointed to by the symlink named  
‘common’ in the lib directory?

I’ve tried:

cofig/environment.rb

include ‘lib/common’

Thanks for your input.  
EB

---

<div class="post-metadata">

**Author:** ![eblatt](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/7bcc69/32.png) [@eblatt](https://www.ruby-forum.com/u/eblatt)\
**Post date:** [March 23, 2007, 5:58pm UTC](https://www.ruby-forum.com/t/how-to-share-a-collection-of-model-files-across-many-apps/89895/2 "2007-03-23T17:58:50Z")

</div>

Elliott B. wrote:

> lib/  
> common/ (which is a symlink)
> 
> My question is:  
> How do I tell rails to load the files pointed to by the symlink named  
> ‘common’ in the lib directory?

First, you might want to ask this at the Rails Mailinglist.

Secondly, your solution wouldn’t be portable, as only Unixes (MacOS,  
HP-UX, OpenSolaris, Linux) understand symlinks. Windows doesn’t  
understand POSIX symlinks at all.

–  
Phillip “CynicalRyan” Gawlowski

Rule of Open-Source Programming #15:

If you like it, let the author know. If you hate it, let the author  
know why.

---

<div class="post-metadata">

**Author:** ![eblatt](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/7bcc69/32.png) [@eblatt](https://www.ruby-forum.com/u/eblatt)\
**Post date:** [March 23, 2007, 9:45pm UTC](https://www.ruby-forum.com/t/how-to-share-a-collection-of-model-files-across-many-apps/89895/3 "2007-03-23T21:45:17Z")

</div>

On Sat, Mar 24, 2007 at 12:24:27AM +0900, Elliott B. wrote:

> common/ (which is a symlink)
> 
> My question is:  
> How do I tell rails to load the files pointed to by the symlink named  
> ‘common’ in the lib directory?

I’m going to have to do something like this soon.

Personally I want to avoid symlinks, and I think what you want should be  
possible simply by adding the appropriate directory to  
config.load\_paths,  
e.g.

```
config.load_paths << "#{RAILS_ROOT}/../common/app/models"

```

Now, if you enter “site:rubyonrails.com config.load\_paths” into Google,  
there are two hits, and the second one looks like a Wiki page which  
explains  
exactly this. Unfortunately, when I follow it at the moment all I see is  
“Application error (Rails)” ☹

But the ‘Cached’ link on Google works.

Another idea. If the model is called common/app/models/foo.rb, then you  
can  
create stub files {proj1,proj2,proj3}/app/models/foo.rb which just  
contain  
a single line:

require “#{RAILS\_ROOT}/…/common/app/models/foo.rb”

or even something which does a sub() on **FILE**

Regards,

Brian.

---

<div class="post-metadata">

**Author:** ![eblatt](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/7bcc69/32.png) [@eblatt](https://www.ruby-forum.com/u/eblatt)\
**Post date:** [March 23, 2007, 6:44pm UTC](https://www.ruby-forum.com/t/how-to-share-a-collection-of-model-files-across-many-apps/89895/4 "2007-03-23T18:44:58Z")

</div>

On 3/23/07, Elliott B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> 

If you are using svn:

svn externals works well for this. I would create a tag of the libs so  
when you create tags of your projects you will not have to change the  
external -r option.

[http://svnbook.red-bean.com/en/1.0/ch07s03.html](http://svnbook.red-bean.com/en/1.0/ch07s03.html)

There are unix programs that will keep directories synced.

Stephen B. IV
