2010-11-25 18 views
5

Depuis des années, j'ai utilisé un tuyau ssh de mysqldump sur le serveur live à mysql sur ma machine de développement pour obtenir une copie des données actuelles.Rails rake tâche pour le chargement en direct (MySQL) base de données à base de développement local

ssh -C <server> mysqldump --opt <live_database_name> |mysql <local_dev_database_name> 

-C permet la compression ssh et --opt permet la rapidité et l'exhaustivité.

Quelqu'un a-t-il une tâche de rake équivalente au rail pour cela? Idéalement, il faudrait les noms de base de données de config/database.yml

Répondre

4

https://gist.github.com/750129

Ce n'est pas une solution élégante. Il s'agit essentiellement d'un wrapper pour votre ancienne méthode, il n'est donc même pas compatible avec les autres pilotes de base de données.

Mais c'est quelque chose que vous pouvez mettre dans votre SCM sous lib/tasks pour le partager avec d'autres développeurs de votre équipe. Il utilise également les données de configuration de votre fichier config/database.yml existant. Vous définissez la base de données dynamique en ajoutant simplement une autre branche à ce fichier et elle utilise les mêmes noms de touches que Rails. Peut-être que cela aurait même un sens de réutiliser la configuration de la base de données de production.

+0

Cela ressemble à juste le billet. Je vous remercie! – noodl

+0

Et bien fait de gagner une prime en tant que * premier point * sur SO. Bon enfant, vous allez être une star ;-) – noodl

1

Si vous êtes bien avec le codage dans Ruby, vous pouvez regarder dans seed-fu et activerecord-import.

Oh, j'ai oublié de mentionner standalone-migrations. Il est fourni avec une tâche Rake pour les migrations de schéma.

Bonne chance!

+0

Sweet. Je vais lire. – noodl

+0

Hmm, je ne suis pas vraiment à la recherche d'une solution de données truquées/graine, mais plutôt d'une tâche de rake générique pour charger la base de données en direct dans la base de développement locale. Il est difficile de diagnostiquer les problèmes avec les données en direct sans les données en direct :-) – noodl

+0

Ok noodl. J'espère que vous trouverez ce que vous cherchez! –

0

Théoriquement, vous devriez pouvoir créer une autre "instance" dans database.yml (pour votre serveur live) et y placer l'hôte correct (et laisser le nom d'utilisateur/les mots de passe, etc.). Dans votre tâche de rake, vous chargerez le fichier yaml de la base de données, lisez l'hôte et continuez avec votre slurpiness de ligne de commande. Il pourrait facilement être enveloppé dans une tâche de rake.

2

En voici un que j'utilise pour une base de données Postgres: https://gist.github.com/748222. Il y a trois tâches: db:download, db:replace et db:restore est juste un emballage autour des deux autres.

Je dirais que vous pourriez faire quelque chose de similaire pour Mysql assez rapidement. J'utilise simplement la dernière sauvegarde dans ce cas au lieu de la créer lors de l'exécution.

+0

Cela ressemble à juste le ticket à part la copie de fichier plutôt que la partie pipe-over-ssh. Je verrai à propos de le pirater pour mes besoins demain. Merci! – noodl

1

Au lieu d'utiliser râteau pour ce faire, j'utiliser une tâche de Capistrano, comme vos tâches de Capistrano auraient déjà connaissance de l'endroit où le serveur de production est, etc ...

+0

Vous avez raison de dire que Capistrano serait un excellent choix pour la mise en œuvre, mais je ne l'utilise généralement pas et préférerais avoir une solution qui repose uniquement sur les rails/râteau. – noodl