[ruby-it] Database GRANT

Claudio Petasecca Donati cpetasecca a gmail.com
Gio 25 Set 2008 10:31:35 CEST


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.
-- 
Posted via http://www.ruby-forum.com/.


More information about the Ml mailing list