2010-11-08 4 views
0

SO c'est un peu une requête bizarre, mais j'espère que quelqu'un ici connaîtra une ligne de commande fu. Il faudra peut-être aussi poster sur serverfault, nous verrons.Passer le résultat de la requête Curl à la ligne de commande mysql

J'essaie de comprendre comment je peux transmettre les résultats d'une requête curl à l'application de ligne de commande mysql. Donc, en gros quelque chose un peu comme ça -

mysql --user=root --password=my_pass < (curl http://localhost:3000/application.sql) 

où cette URL renvoie essentiellement une réponse de texte avec des instructions SQL.

Certains contexte:

Une application que je développe prend en charge plusieurs installations, dans le cadre du processus d'installation d'une nouvelle instance, nous tournons une copie de notre base de données « données » pour la nouvelle instance. J'essaie d'automatiser le processus de déploiement autant que possible, j'ai donc construit une petite application "tableau de bord" dans des rails qui peuvent générer les instructions sql, fichiers de configuration, etc pour chaque instance et nous aide également à voir les statistiques sur le instances et autres trucs amusants. Maintenant, j'écris des tâches capistrano pour réellement faire un déploiement basé sur l'ID de l'installation que je passe en tant que variable.

La configuration de déploiement initiale inclut la création de la base de données des applications, ce que fera cette requête SQL. Je pourrais en théorie tirer le fichier dans une requête wget, l'exécuter et le supprimer mais je pensais qu'il serait plus simple de dire au serveur distant de le faire rouler et de l'exécuter en une seule étape.

Alors, des idées?

Répondre

2

Je suis assez certain que la syntaxe que vous avez initialement ne fonctionnera pas car le '<' attend un fichier. Au lieu de cela, vous voulez rediriger la sortie de curl, qui imprime par défaut à STDOUT vers mysql. Je crois que ce qui suit fonctionnera pour vous.

curl http://localhost:3000/application.sql | mysql --user=root --password=my_pass 
+0

a fonctionné comme un charme. Merci. – JoshReedSchramm

2

Dans Bash, vous pouvez effectuer la substitution de processus:

mysql ... < <(curl ...) 
+0

Je ne savais pas que tu pouvais faire ça, c'est net. – Danny

Questions connexes