2017-11-26 4 views
0

예약 된 루비 스크립트를 실행하고 모니터하는 데 사용하려는 서버 (Sinatra)가 있습니다. 이 스크립트는 서버 스크립트에 상태 업데이트를 다시 제공 할 수 있어야하며 서버는 인수를 사용하여 해당 하위 스크립트를 실행할 수 있어야합니다.다른 루비 스크립트를 실행하는 서버

자식 스크립트의 코드를 서버 스크립트로 완전히 구현하는 것 외에, 내가 이것을 할 수있는 유일한 방법은 전역 변수를 사용하는 것입니다. 그러나 여러 서버 스크립트에서이 유형의 설치를 계속하면 매우 혼란 스러울 수 있으므로 걱정이됩니다. 글로벌 변수가 frowned하다는 것을 알고 있습니다.

이 상황을 처리하는 가장 좋은 방법은 무엇입니까? 모듈을 실제로 사용하지는 않았지만 부모에게 업데이트를 다시 보내야 할 때 모듈을 사용할 수있는 방법을 알지 못합니다 ..

답변

0

Sinatra에 대한 백 워드 작업 생성에 대한 답변이있었습니다.

http://blog.markwatson.com/2011/11/ruby-sinatra-web-apps-with-background.html

참고 :이 블로그에 내가 링크가 변경 몇 시간 때문에 전체 주소를 넣어. 여기

물론 매개 변수를 전달하는 방법을 표시되지 않습니다,하지만 당신은 당신이 스레드에 paramters를 전달할 수있는 기본 아이디어를

require 'rubygems' 
require 'sinatra' 

$sum = 0 

Thread.new do # trivial example work thread 
    while true do 
    sleep 0.12 
    $sum += 1 
    end 
end 

get '/' do 
    "Testing background work thread: sum is #{$sum}" 
end 

을 파악뿐만 아니라에서 반환 매개 변수를 수신 할 수있는 예제의 추출물 그것. Vinay의 답변을 확인하십시오. https://stackoverflow.com/a/1383464/1175090

+0

감사합니다. 그렇다면 다른 스크립트의 코드를 서버 스크립트에 직접 구현하는 것이 가장 좋습니다. 코드를 여러 파일로 분리하고 자식 코드에서 부모 코드로 값을 반환 할 수있는 방법이 있습니까? – Max

+0

당신은 항상 당신의 스크립트의 내용을 담은 외부 파일 인 당신 자신의 구현으로 Thread 클래스를 상속받을 수 있습니다. 스레드에서 값을 반환하려면 'my_thread.join'이 포함 된 스레드를 기다려야합니다 (마지막 링크 참조). –