8
votes

Comment capturer la sortie Rake peut-elle appeler avec un script Ruby?

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


0 commentaires

4 Réponses :


2
votes

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.

espère que cela aide:
http://thinkingdigitistally.com/archive/capturing-Output-de-de -put-in-ruby /

Vous pouvez également vouloir vérifier la sortie de sortie par Matthias Hennemeyer:
http://github.com/mhennemeyer/output_catcher


1 commentaires

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.



4
votes

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


0 commentaires

1
votes

ligne 1174 de gemmes / râteau-0,8,7 / lib / rake.rb: xxx

peut-être essayer peut-être capturer starr ainsi que stdout?

Je suis Ne disant pas que toutes les sorties sont effectuées via $ stardr , 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>.

Je n'ai pas testé l'idée.


0 commentaires

1
votes

Cela fait le tour pour moi: xxx

vu à: https: // Stackoverflow. COM / A / 2480439/21217


0 commentaires