2014-07-11 2 views
3

사용자가 cmd 행에서 실행할 스크립트를 선택하고 스크립트가 실시간으로 (가까이) 실행될 때 스크립트의 출력을보고 싶습니다. 나는 이것이 안전하지 않다는 것을 안다. 그것은 작은 팀에서 셀프 서비스 수준을 허용하는 데 사용되는 내부 도구이다.Rails - cmd 라인 스크립트를 실행하고 실시간으로 출력을 표시하는 방법은 무엇입니까?

다음은 cmd 행에서 뭔가를 실행하고 출력을 실시간으로 표시하는 루비 스크립트의 빠른 예입니다. 내가 알아낼 수없는 것은 이것을 레일에서 작동시키는 방법입니다.

cmd = %q[echo '3...'; sleep 1; 
     echo '2...'; sleep 1; 
     echo '1...'; sleep 1; 
     echo 'Liftoff!'] 

puts '------ beginning command ------' 
output_log = [] 
IO.popen(cmd).each do |line| 
    puts line 
    output_log << "[#{Time.now}] #{line}" 
end.close # Without close, you won't be able to access $? 
puts '------ done with command ------' 

puts "The command's exit code was: #{$?.exitstatus}" 
puts 'Here is the log:' 
puts output_log.join('') 

기존 보석이 있습니까? Ajax 요청을 통해 명령을 실행하고 버퍼로 출력 한 다음 스크립트가 실행될 때 버퍼를 플러시하고 실행중인 페이지로 응답을 보낼 수 있습니까? 도움이된다면 iframe을 사용해도 괜찮습니다.

도움이나 올바른 방향을 가리키는 도움말은 대단히 감사합니다!

+1

이 스크립트는 무엇을하고 있습니까? 스크립트를 리포지토리에 저장하고 사람들이 로컬에서 실행하도록하는 방법이 있습니까? 이 작업을 확장 가능한 방식, 즉 둘 이상의 호스트에서 수행하려면 각 스크립트의 진행을 어딘가에 유지해야 할 수 있습니다. 예를 들어, 데이터베이스에 저장할 수 있습니다. – Max

+0

스크립트는 기술적이지 않은 사용자가 GUI에서 테스트 환경을 스스로 관리 할 수 ​​있도록합니다. 규모는 문제가 아니지만 데이터베이스 나 플랫 파일에 어딘가에 쓰는 것이 유일한 방법이었습니다. 레일즈는 당신을 위해 많은 것을 할 수 있습니다. 그래서 나는 이것을 할 보석이있을 것이라고 생각했습니다. 감사. – user797963

답변

0

이렇게하려면 실제로 스크립트를 실행하기 위해 지연된 작업 또는조차 개체가 필요합니다. ruby ​​IO.popen 메서드를 사용하여 명령을 실행하고 출력을 읽고 데이터베이스로 플러시합니다. 웹 응용 프로그램에서 해당 데이터베이스 개체의 아약스를 통해 데이터를 폴링하면됩니다.

관련 문제