2012-01-17 1 views
2

Les database followers d'Heroku sont plutôt cool. Ils vous permettent de créer une base de données distincte qui reste automatiquement synchronisée avec votre base de données principale.Lire à partir d'une base de données et écrire à une autre dans Rails 2.3

Je veux utiliser cette technologie pour accéder à ma base de données suiveur au lieu de ma base de données maître pour les opérations de lecture coûteuses (mais évidemment je veux toujours écrire à ma base de données maître)

Est-il possible d'accéder à deux bases de données (la maître pour l'écriture et l'adepte pour la lecture) pendant que je suis dans mon environnement de production? Mon API idéal serait quelque chose comme Post.use_db(:follower).find(1) ou Post.find(1, :use_db => :follower)?

Répondre

4

DbCharmer a été suspendu

Au cours des 2 dernières années (en essayant de faire DbCharmer compatible avec Rails 4.0), il est devenu de plus en plus évident, que je ne veux pas simplement faire plus . Je n'ai pas besoin de DbCharmer pour prendre en charge Rails 4.0+, alors qu'il est très clair que de nombreux utilisateurs en ont besoin et que les problèmes et la liste de diffusion ne cessent de susciter des inquiétudes. à propos (le pire genre). En conséquence, puisque je ne vois tout simplement pas de bonnes raisons de continuer à lutter contre cette bataille difficile (et le développement de choses comme ça pour ActiveRecord IS une bataille constante!) Je donne officiellement. read more

Makara pourrait être une alternative: github.com/taskrabbit/makara

réponse originale

Pour autant que je sache, Rails ne propose pas cette fonctionnalité hors de la boîte. Cependant, j'ai trouvé un bijou appelé db-charmer, qui semble être très proche de ce que vous cherchez.

Voici la meilleure partie (par requête de gestion de connexion):

Parfois, vous avez sélectionné les requêtes que vous savez que vous voulez exécuter sur le maître. Cela peut se produire par exemple lorsque vous venez d'ajouter des données et que vous avez besoin de les lire et de ne pas savoir si elles sont encore entrées dans l'esclave ou non. Pour cette situation, et quelques autres, il y a un ensemble de méthodes que nous avons ajoutées aux modèles ActiveRecord:

User.on_master.find_by_activation_code(code) 

on_slave - cette méthode est utilisée pour la force une requête à exécuter sur un esclave même dans des situations où il a déjà été forcé d'utiliser le maître. S'il y a plus d'un esclave, un serait sélectionné aléatoirement. Cette méthode a aussi deux formes: block et proxy.

on_db (connexion) - cette méthode est ce qui rend possible deux méthodes précédentes. Il est utilisé pour commuter la connexion d'un modèle à un certain DB pour un court bloc de code ou même pour une déclaration (deux formes). Il accepte la même plage de valeurs que la méthode switch_connection_to.Exemple:

Comment.on_db(:olap).count 
Post.on_db(:foo).find(:first) 
+1

db charmeur a été retiré. –

Questions connexes