Как я могу получить вывод Граблей при вызове от со сценарием Ruby?

Оператор изменения к

  DBCC CHECKIDENT('TableName', RESEED, 1)

Это запустится от 2 (или 1 при воссоздании таблицы) но это никогда не будет 0.

7
задан 18 September 2009 в 06:45
поделиться

3 ответа

Что ж, я знаю, что ZenTest может захватывать выражения «помещает» через «until_capture», и я даже нашел человека, который написал о пользовательской реализации, расширив модуль ядра и перенаправив $ stdout на экземпляр StringIO.

Надеюсь, что это поможет:
http://thinkingdigitally.com/archive/capturing-output-from-puts-in-ruby/

Вы также можете попробовать OutputCatcher Маттиаса Хеннемейера :
http://github.com/mhennemeyer/output_catcher

2
ответ дан 7 December 2019 в 07:48
поделиться

Хотя это своего рода хак (поскольку Rack написан на Ruby), вы можете использовать метод open3 popen3 и вызывать задачу rake, как если бы вы делали это из командной строки. .

В вашем случае вы бы использовали это так

require 'open3'

buffer = []
Open3::popen3("rake db:migrate:redo") do |stdin,stdout,stderr|
  begin
    while line = stdout.readline
      buffer << line
    end
  rescue
  end
end

Таким образом, вы бы получили все строки, которые rake возвращались в stdout в буфере . Возможно, это работает более надежно, хотя я бы рекомендовал исследовать источник странного поведения. вы описываете.

3
ответ дан 7 December 2019 в 07:48
поделиться

Строка 1174 в gems / rake-0.8.7 / lib / rake.rb:

  # Send the message to the default rake output (which is $stderr).
  def rake_output_message(message)
    $stderr.puts(message)
  end
  private :rake_output_message

Может быть, попробуйте захватить STDERR, а также STDOUT?

Я не говорю, что весь вывод выполняется через $ stderr , но похоже, что сам rake установил это соглашение, возможно, где-то в процессе кто-то заставил определенные задачи rake перезаписать put, чтобы направить его на $ stderr .

Я не тестировал эту идею.

1
ответ дан 7 December 2019 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: