Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
= Multisite for Rails Applications This plugin provides basic support for hosting multiple sites on the same Rails code base. It is based on Matt McCray's theme_support plugin, but is essentially completely gutted and rewritten with a different focus. The essential functionality of the plugin is to add a specific site's views to the view path. The concept of a view_path is new to Rails 2.0. == Requirements * This plugin is tested in Rails 2.0.2. Updates for Rails 2.1 and 2.2 (see tags) have been submitted but are untested by me. == Differences from theme_support If you are familiar with theme_support, a 'site' is equivalent to a 'theme' in the old system. The big difference is that this plugin doesn't make any arrangements for presenting public files. Although a public directory is created by the generator, this can just as easily be a symlink to another directory. The intended use is to configure Apache to provide access to static files for each domain, possibly with a rewrite rule falling back to the main Rails public directory. This approach was chosen because the static file caching in theme_support required long paths to static files that should be unnecessary when they are created on a per-domain basis. By letting Apache handle the specifics, static files are much simpler (no image URL coupling to the theme name, or cache expiration problems), and converting raw HTML mockups from designers tends to be much easier as well. While theme_support only officially worked through Rails 1.1, and 1.2 with some 3rd party patches (Matt where are you?), this plugin requires Rails 2.0 for the Multiple View Path functionality (http://weblog.rubyonrails.com/2007/2/4/new-feature-for-rails-2-0-multiple-controller-view-paths). This addition to Rails makes much of the remaining complexity of the theme_support plugin disappear. One big bonus is that templates can now be created on a per-site basis without a parent template having to exist in the base directory. This is handy for creating extra content pages or breaking things down into partials. == Usage You can use the site_generator to create the file structure needed, or create it yourself. It expects the following site folder structure. $app_root sites/ [site_name] views/ <- you can override application views public/ <- intended to be the DOCUMENT_ROOT of the site You specify which site to use in your controller by using the declarative 'site' syntax. Although this could be automated based on domain name, the relationship between domains and sites is not necessarily 1:1, so you will need to develop a mechanism for choosing a 'site'. class ApplicationController < ActionController::Base site 'blue_bird' ... end You can also defer the theme lookup to a controller method: class ApplicationController < ActionController::Base site :get_site def get_site domain = Domain.find_by_name(request.domain) domain.theme end ... end Note: By setting the site in the ApplicationController you can set the site for the whole application.