2011-12-07 2 views
0

J'ai des problèmes pour copier les données d'un serveur de production MySQL vers un fichier de développement SQLite3 (pour avoir de vraies données avec la machine de développement). J'ai trouvé des tonnes de ressources autour du net sur la façon de convertir MySQL en SQLite3, dont la plupart étaient des scripts bash avec des filtres sed élaborés, mais aucun ne fonctionnait (le problème le plus courant était les problèmes de syntaxe lors de l'importation).Rails: copie des données de la production MySQL vers le développement SQLite3

De toute façon, alors je suis tombé sur YamlDB, et je me suis dit "Pourquoi, bien sûr, laissez Rails faire la conversion pour moi!" Eh bien, cela ne fonctionne pas non plus parce que tous les champs NULL (qui sont représentés dans le fichier YAML comme !!null) finissent par être importés dans la base de données SQLite3 exactement comme "--- !! null" au lieu de NULL réels. Je semble être la seule personne avec ce problème, car il n'y avait aucune mention de cela dans la file d'attente de problèmes de GitHub.

J'ai même essayé la solution de contournement pour utiliser syck au lieu de psych (trouvé dans this SO question), mais cela n'a fait aucune différence. Donc, ma question est la suivante: est-ce que QUELQU'UN connaît une façon SIMPLE d'exporter des données d'une base de données de rails pour l'importer dans un autre, quel que soit le type de base de données? Et par "simple", je veux dire quelques commandes sur la console, ou peu importe.

+0

par rapport je voudrais vraiment, vraiment recommander de ne pas utiliser deux bases de données différentes back-ends pour production et développement. En tant que base de données agnostique comme les rails est censé être, quand il s'agit de l'intégrité des données, vous pouvez toujours obtenir des comportements très différents. Cela devient particulièrement vrai lorsque l'on travaille avec quelque chose qui supporte de nombreux types de contraintes (MySQL) et quelque chose qui a un support très différent de contrainte/type de données (SQLite3). – TreyE

+0

J'ai déjà entendu cette recommandation, et pendant un certain temps, MySQL fonctionnait sur ma machine de développement. Mais je n'aimais vraiment pas les frais généraux d'avoir à démarrer un serveur MySQL sur mon MacBook, donc je suis retourné à SQLite3 pour le développement. Vous faites un bon point, encore. Mais la copie des données ne serait qu'unidirectionnelle (production -> développement), et ensuite utilisée comme "jeu" de données pendant le développement piratage ... –

+0

Mon plus gros souci serait que vous pourriez voir un comportement différent lors de vos tests. Par exemple, vous risquez d'obtenir un plantage en production qui n'apparaît pas en développement/test en raison des différents types/contraintes de données. Je n'aime pas vraiment quand je dois faire le développement de SQL Server et lancer un Windows VM/SQL Server - mais le nombre de bogues que j'ai découverts de cette manière l'emporte toujours sur la consommation de ressources. (Et c'est vraiment dire quelque chose si la chose qui consomme des ressources est Windows: P). – TreyE

Répondre

2

Regardez dans les robinets @http://github.com/ricardochimal/taps

Il videra votre db MySQL en db sqlite local et est relativement simple à utiliser.

D'après les commentaires: Si vous obtenez une erreur indiquant schema parsing returned no columns, table probably doesn't exist alors vous devez spécifier un chemin absolu au sqlite3 db au lieu d'un

+0

Ce regard prometteur, sauf lui aussi, semble me détester. Une fois que le serveur a terminé une extraction, il se bloque toujours avec 'l'analyse du schéma n'a renvoyé aucune colonne, la table n'existe probablement pas, peu importe ce que j'essaie. Eh bien, la recherche continue ... –

+1

Pour résoudre l'erreur "l'analyse de schéma n'a renvoyé aucune colonne", spécifiez le chemin absolu vers la db sqlite3 au lieu d'un chemin relatif ... – Urkle

Questions connexes