[Mongrel] Sharing a mongrel cluster in a multi-url environment

Jonathan Rochkind rochkind at jhu.edu
Fri Jan 30 10:28:47 EST 2009

I'm suspicious of your idea that having each client have their own db is 
going to be more efficient. Most rdbms are set up to support very large 
tables, if you have the proper indexes created, but not neccesarily set 
up to support thousands of seperate databases within an rdbms instance.

At least, AR is written assuming you are NOT going to do what you're 
trying to do, so you're definitely going to be fighting AR to do this.

But this is really an AR question rather than a mongrel question. You 
could try asking on the AR lists.


John Almberg wrote:
> On Jan 29, 2009, at 10:17 PM, Will Green wrote:
>> I'm not sure that instance-specific connections are supported by
>> ActiveRecord (you can, however, use class-specific connections).
>> From the
>> ActiveRecord documentation,
>> http://api.rubyonrails.org/classes/ActiveRecord/Base.html, the
>> database
>> connection information is tied to your model at the class level. I
>> don't
>> think you can accomplish what you have described without a separate
>> Mongrel
>> cluster for each virtual host.
> I'm hoping I can. What I'm going to try next is to use a common
> database (the one defined in environment/production.rb) for the
> sessions table. Then when I switch the database to the client's db,
> the session table won't be affected.
> That's the theory, anyway.
>> Here's an alternate idea:
>> Assuming you're deploying to a *nix server, what you might try
>> instead is
>> having your rails app live in one location on the file system.
>> Then, since
>> the only thing that is different is the configuration, for each
>> domain,
>> symlink in all but the config directory. The config directory will
>> then be
>> unique for each app, but all the code will be shared. When you
>> update the
>> application code, simply restart all the mongrel clusters.
> Well, if I can get what I need working, I'll only have one shared
> mongrel cluster. That is the goal -- to eliminate the need to have
> dedicated mongrels for every client. I really don't want to have
> hundreds of mongrels cluttering up the system.
> BTW, I don't think it is a problem to have multiple mongrel clusters
> on one directory. I haven't tried this, but don't see why it wouldn't
> work. Just use a different pid for each cluster.
>> Another idea: you may want to reconsider your application
>> architecture. Do
>> you really need a separate database for each host? Could you instead
>> introduce a ClientAccount class (that has the value from
>> X_CLIENT_ID as the
>> Primary Key), and tie it into the other models with has_many
>> relationships
>> and a before_filter on the ApplicationController? This way, you
>> don't need
>> separate configs, you could point each VirtualHost at the same Mongrel
>> cluster, AND you could manage the Client Account within rails.
> I've thought about that, but each client potentially has thousands of
> records in his/her database. I believe the system will get too slow
> if all records are in one db, and all clients will be impacted by the
> one client who has a million records.
> Plus each and every table would have to have client_id in it. That
> just smells bad to me. Much simpler to just give each client his own
> db and switch on the request. That's what I'm hoping for, anyway.
> -- John
> _______________________________________________
> Mongrel-users mailing list
> Mongrel-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/mongrel-users

Jonathan Rochkind
Digital Services Software Engineer
The Sheridan Libraries
Johns Hopkins University
rochkind (at) jhu.edu

More information about the Mongrel-users mailing list