J'écris une console Dev-console sur le Web pour le développement des rails. Dans l'une de mes actions de contrôleur, je m'appelle Rake, mais je ne suis pas en mesure de capturer l'une des sorties que Rake génère. Par exemple, voici quelques échantillons de code, à partir du contrôleur:
Rake.application['db:migrate:redo'].reenable Rake.application['db:migrate:redo'].invoke
4 Réponses :
Eh bien, je sais que zentest est capable de capturer des "puts" -statifs à travers "jusqu'à ce que" jusqu'à ce que j'ai trouvé quelqu'un qui a écrit une mise en œuvre personnalisée en prolongeant le module de noyau et en redirectant $ stdout à une instance de StringIO. P >
espère que cela aide:
http://thinkingdigitistally.com/archive/capturing-Output-de-de -put-in-ruby / p>
Vous pouvez également vouloir vérifier la sortie de sortie par Matthias Hennemeyer:
http://github.com/mhennemeyer/output_catcher P>
Merci pour votre suggestion. Malheureusement, la capture de Stdio dans le module du noyau semble donner exactement les mêmes résultats que je reçois avec ma méthode Capture_Output locale.
S'il s'agit d'une sorte de hack (puisque Rack est écrit en rubis), vous pouvez utiliser Open3's POPEN3 méthode et appelez la tâche Rake Tâche comme si vous le feriez de la ligne de commande.
Dans votre cas, vous l'utiliseriez comme ça P>
require 'open3' buffer = [] Open3::popen3("rake db:migrate:redo") do |stdin,stdout,stderr| begin while line = stdout.readline buffer << line end rescue end end
ligne 1174 de gemmes / râteau-0,8,7 / lib / rake.rb: peut-être essayer peut-être capturer starr ainsi que stdout? p> Je suis Ne disant pas que toutes les sorties sont effectuées via Je n'ai pas testé l'idée. P> p> $ stardr code>, mais le râteau lui-même semble avoir mis en place cette convention, peut-être quelque part le long de la ligne qui a rendu certaines tâches de râteau écrasent les plaies à un
$ stardr < / code>. P>
Cela fait le tour pour moi: vu à: https: // Stackoverflow. COM / A / 2480439/21217 P> P>