In cima alla mia testa è possibile eseguire una nuova istanza del server per ogni sottodominio utilizzando un ambiente diverso.
Ma questo non si ridimensionerà molto bene.
Tuttavia i primi google hits for multiple rails databases presentano alcuni nuovi suggerimenti. Mettere insieme le informazioni in questi collegamenti fornisce questa soluzione interamente non testata per una singola istanza del server.
È necessario aggiungere una voce di database per ogni sottodominio nel database.yml. Quindi aggiungi un before_filter al controller dell'applicazione
Aggiornamento! L'esempio ricarica dinamicamente le configurazioni del database. Sfortunatamente non c'è un buon modo per rendere i binari dell'aggiornamento senza compromettere gli interni del server. Quindi la configurazione del database dovrà essere ricaricata su ogni richiesta.
Questo esempio presuppone che le voci del database in databases.yml abbiano un nome dopo i sottodomini.
config/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
...
app/controllers/application_controller.rb richiedono '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
Come ho detto è completamente testato. Ma non prevedo alcun problema importante. Se non funziona, spero che ti metta sulla buona strada.
+1 - Sicuramente molto utile. Puoi darmi un'idea del successo della performance (se presente) con questo approccio? –
Mi spiace di non avere un benchmark per questo. Ho solo questo lavoro su una beta privata al momento. – Kris
Qualcuno ha qualche ipotesi sul fatto che questo richiederà un impatto negativo sulle prestazioni o no? Mi piacerebbe fare qualcosa di simile per un sito di produzione. – NotDan