레일 개발 용 웹 기반 dev-console을 작성 중입니다. 내 컨트롤러 동작 중 하나에서 Rake를 호출 중이지만 Rake가 생성하는 출력을 캡처 할 수 없습니다. 예를 들어 컨트롤러의 샘플 코드는 다음과 같습니다.Ruby 스크립트에서 호출 할 때 Rake 출력을 캡처하는 방법은 무엇입니까?
require 'rake'
require 'rake/rdoctask'
require 'rake/testtask'
require 'tasks/rails'
require 'stringio'
...
def show_routes
@results = capture_stdout { Rake.tasks['routes'].invoke }
# @results is nil -- the capture_stdout doesn't catpure anything that Rake generates
end
def capture_stdout
s = StringIO.new
$stdout = s
yield
s.string
ensure
$stdout = STDOUT
end
왜 내가 레이크 출력을 캡처 할 수 없는지 아는 사람 있습니까? 레이크 소스를 통해 시도해 봤는데 새로운 프로세스 나 다른 것이 어디에서 발생하는지 알 수 없으므로이 작업을 수행 할 수 있어야한다고 생각합니다.
감사합니다. 아드리안
훨씬 더 잘 작동 루비 내부에서 레이크를 호출하는 올바른 방법을 발견하기 때문에 나는이 :
Rake.application['db:migrate:redo'].reenable
Rake.application['db:migrate:redo'].invoke
는 이상하게도, 일부 레이크 작업은 이제 (경로) 완벽하게 작동, 일부 캡처 출력을 첫 번째 실행 이후는 항상 비어 있으며 (db : migrate : redo) 일부는 출력 (test)을 캡처하지 않는 것처럼 보입니다. 이상한.