Al Shox wrote:
Sarò testone io, ma non è possibile creare una classe che instanzia
tutte e tre le connessioni che necessito, alla quale fanno riferimento i
miei controller (un controller->una istanza (che ne so, magari tramite
richiamo di qualche metodo??))??
Io mi definirei un filtro che (dopo l’autenticazione) associa la
connessione all’utente corrente.
Qualcosa di simile a:
class ApplicationController < ActionController::Base
before_filter :check_if_login_required
def check_if_login_required
# setup user (ad es in User.current) in base alla sessione
...
# carica le configurazioni dei database
$$config ||= YAML.load_file("#{RAILS_ROOT}/config/database.yml")
# stabilisci la connessione per le classi di model
# assumendo che esista un metodo User::role che ti dice
# il nome del ruolo dell'utente
ActiveRecord::Base.estabilish_connection $$config[User.current ?
User.current.role: ‘default’]
redirect_to :controller => "account", :action => "login" and
return false unless User.current
return true
end
end
Se poi vuoi creare le connessioni staticamente allo startup in un pool,
potresti provare.
Crei una classe (in lib/) con metodi statici, richiamandola con
uso: ConnectionPool.connection(‘standard’)
class ConnectionPool
def self.config
$$config ||= YAML.load_file("#{RAILS_ROOT}/config/database.yml")
end
def self.connection(configuration)
$$pool ||= Hash.new
$$pool[configuration] ||=
create_connection(config[configuration])
end
def self.create_connection(hash)
...
end
end
Credo che Rails sia gia’ abilitato a gestire pool di connessioni, ma non
ne sono sicuro.
Dovresti googlare al riguardo.
Troverai sicuramente codice migliore.
Per quanto ne so, in Ruby/Rails anzichè un pool di connessioni,
si preferisce gestire un pool di processi, ognuno con la sua
connessione.