Оператор изменения к
DBCC CHECKIDENT('TableName', RESEED, 1)
Это запустится от 2 (или 1 при воссоздании таблицы) но это никогда не будет 0.
Что ж, я знаю, что ZenTest может захватывать выражения «помещает» через «until_capture», и я даже нашел человека, который написал о пользовательской реализации, расширив модуль ядра и перенаправив $ stdout на экземпляр StringIO.
Надеюсь, что это поможет:
http://thinkingdigitally.com/archive/capturing-output-from-puts-in-ruby/
Вы также можете попробовать OutputCatcher Маттиаса Хеннемейера :
http://github.com/mhennemeyer/output_catcher
Хотя это своего рода хак (поскольку 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 в буфере
. Возможно, это работает более надежно, хотя я бы рекомендовал исследовать источник странного поведения.
вы описываете.
Строка 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
.
Я не тестировал эту идею.