Вдобавок ко всему, вы можете запустить новый экземпляр сервера для каждого субдомена в другой среде.
Но это не очень хорошо масштабируется.
Однако первые несколько хитов Google для баз данных с несколькими рельсами приводят некоторые новые предложения. Объединение информации в этих ссылках обеспечивает это полностью непроверенное решение для одного экземпляра сервера.
Вам необходимо добавить запись базы данных для каждого субдомена в вашем database.yml. Затем добавьте before_filter к вашему контроллеру приложения
Обновление! Пример динамически перезагружает конфигурации базы данных. К сожалению, нет хорошего способа сделать рельсы обновлений широкими, не связываясь с внутренностями вашего сервера. Таким образом, конфигурация базы данных должна будет перезагружаться при каждом запросе.
В этом примере предполагается, что записи базы данных в database.yml названы в честь поддоменов.
конфиг / database.yml
login: &login
adapter: mysql
username: rails
password: IamAStrongPassword!
host: localhost
production:
<<: *login
database: mysite_www
subdomain1:
<<: *login
database: mysite_subdomain1
subdomain2:
<<: *login
database: mysite_subdomain2
...
приложение / контроллеры / application_controller.rb
требовать 'erb'
before_filter: switch_db_connection
def switch_db_connection
subdomain = request.subdomains.first
ActiveRecord::Base.configurations = YAML::load(ERB.new(IO.read(Rails.configuration.database_configuration_file)).result)
ActiveRecord::Base.establish_connection("mysite_#{subdomain}")
end
Как я уже сказал, это полностью не проверено. Но я не предвижу никаких серьезных проблем. Если это не сработает, мы надеемся, что вы на правильном пути.