Controllato ActiveRecord, DataMapper, Sequel: alcuni usano globals (variabili statiche) alcuni richiedono una connessione db aperta prima di caricare il file sorgente con i modelli. Quale ORM è meglio usare nell'applicazione sinatra che utilizza database diversi.Quale ORM utilizzare in un'unica applicazione sinatra multiple db connections?
risposta
DataMapper è progettato per l'utilizzo multi-database.
È possibile impostare più repository semplicemente dicendo qualcosa come DataMapper.setup(:repository_one, "mysql://localhost/my_db_name")
.
DataMapper poi tiene traccia di tutti i repository che avete predisposto un hash che è possibile fare riferimento e utilizzare per scoping:
DataMapper.repository(:repository_one){ MyModel.all }
(L'ambito predefinito solo di essere DataMapper.repository, che è possibile impostare dicendo DataMapper.setup(:default, "postgres://localhost/my_primary_db")
o simili)
Personalmente preferisco Sequel per tutti i miei ORM e gli accessi al database di base ed è quello che uso con Sinatra/Padrino e in qualsiasi altro momento ho bisogno di accedere a un database al di fuori di Rails.
Ho usato DataMapper ma ho sentito che Sequel era più semplice e flessibile, ma forse è proprio così che funziona la mia mente. ActiveRecord è OK da solo, ma penso che funzioni meglio in combinazione con Rails.
Quale è "migliore"? Penso che sia soggettivo e per lo più sia legato a come funziona il tuo cervello.
Sembra che sia possibile utilizzare database diversi nella maggior parte degli ORM. Per DataMapper guarda la risposta della teoria. Per Sequel si può passare gestore di database per il modello:
class Tag < Sequel::Model(db)
end
dove db è aperto database. Per ActiveRecord è possibile utilizzare il metodo establish_connection.
La documentazione ufficiale è disponibile su http://datamapper.org/docs/misc.html. Se non si specifica un contesto/repository, prende il valore ': default'. Dovresti almeno avere un tale contesto. –