Running multiple sites on the same Rails app

Hi everyone,

So I have this app that I built which originally only needed to support one site, and it runs quite fast. Now I added the ability to run multiple sites on the same app, similar to how wordpress.com and Posterous run multiple different sites with different domains and content on the same software. However, since adding a Site model and it's associations, the app is much, much slower. Using EXPLAIN I can see that the additional JOINs are causing bottlenecks, and I'm having trouble figuring out what the best indexing and lookup strategy is. Download objects can appear in 1 or more sites.

The models go like this:

class Site < ActiveRecord::Base   has_and_belongs_to_many :downloads end

class Download < ActiveRecord::Base   acts_as_taggable   has_permalink :title   belongs_to :category   has_and_belongs_to_many :sites end

require 'ancestry' # uses ancestry gem for hierarchies https://github.com/stefankroes/ancestry class Category < ActiveRecord::Base   has_permalink :name, :permalink   has_ancestry   has_many :downloads

  def to_s     path.map { |cat| cat.name }.join(" > ")   end end

# application_controller.rb def set_site   @site = Site.first(:conditions => {:domain => request.domain})   # do some other stuff like set up some site-wide titles, logos, etc. end

Also, I want to be able to show only the categories that contain active download objects for a particular site.

Can anyone help me figure out what the best way to go about this is?

Thanks!

Avishai

Hi everyone,

So I have this app that I built which originally only needed to support one site, and it runs quite fast. Now I added the ability to run multiple sites on the same app, similar to how wordpress.com and Posterous run multiple different sites with different domains and content on the same software. However, since adding a Site model and it's associations, the app is much, much slower. Using EXPLAIN I can see that the additional JOINs are causing bottlenecks, and I'm having trouble figuring out what the best indexing and lookup strategy is. Download objects can appear in 1 or more sites.

So what are the queries that are slow and what do they / their explain plan look like ?

Fred