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

Discussion in 'Ruby' started by Elliott Blatt, Mar 23, 2007.

  1. 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

    --
    Posted via http://www.ruby-forum.com/.
     
    Elliott Blatt, Mar 23, 2007
    #1
    1. Advertising

  2. Elliott Blatt wrote:
    > 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?


    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.
     
    Phillip Gawlowski, Mar 23, 2007
    #2
    1. Advertising

  3. Elliott Blatt

    Guest

    On 3/23/07, Elliott Blatt <> wrote:
    > 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
    >
    > --
    > Posted via http://www.ruby-forum.com/.
    >
    >


    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

    There are unix programs that will keep directories synced.

    Stephen Becker IV
     
    , Mar 23, 2007
    #3
  4. On Sat, Mar 24, 2007 at 12:24:27AM +0900, Elliott Blatt wrote:
    > 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'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.
     
    Brian Candler, Mar 23, 2007
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jheitmuller
    Replies:
    1
    Views:
    473
  2. dx
    Replies:
    4
    Views:
    737
  3. dee
    Replies:
    2
    Views:
    406
  4. Øyvind Isaksen
    Replies:
    1
    Views:
    1,002
    Øyvind Isaksen
    May 18, 2007
  5. Saraswati lakki
    Replies:
    0
    Views:
    1,381
    Saraswati lakki
    Jan 6, 2012
Loading...

Share This Page