2014-01-06 1 views
1

Server 버전 : 내장 아파치/2.2.22 (데비안) 서버 : 2013년 3월 4일 22시 5분 29초스트리밍 아파치 및 여객

Phusion 여객 버전 4.0.21

Alias /tester /var/www/tester/public 
<Location /tester> 
    PassengerBaseURI /tester 
    PassengerAppRoot /var/www/tester 
</Location> 
<Directory /var/www/tester> 
    Allow from all 
    Options -MultiViews 
    #Enable response streaming 
    PassengerBufferResponse off 
</Directory> 

안녕하세요, Apache를 사용하는 동안 '스트리밍'에 문제가 있습니다. 다음 코드를 실행하려고하면 클라이언트에 보내기 전에 처리가 완료됩니다. 나는 CLI에서 얇은,시나, 또는 승객을 시작 응용 프로그램을 실행하는 경우, 그것은 다음 시간 이후 '바'를 스트리밍 할 것 'foo는'스트리밍합니다

#app.rb 
require 'sinatra' 

get '/' do 
    stream do |out| 
    out << "foo\n" 
    sleep 10 
    out << "bar\n" 
end 
end 

.

Apache가 출력을 버퍼링하는 이유는 무엇입니까?

답변

0

이것은 Sinatra의 제한 사항입니다. Sinatra 스트리밍 API는 Phusion Passenger가 아닌 EventMachine 기반 서버 만 지원합니다. Sinatra 스트리밍 API를 사용하지 마십시오. 대신, 저수준 랙 API를 직접 사용하여 스트리밍을 구현하십시오. 이 목적으로 the Rack socket hijacking API을 사용하여 원시 HTTP 응답을 소켓을 통해 보낼 수 있습니다.

+0

답변 해 주셔서 감사합니다. 내가 그 토끼 구멍을 내려 가기 전에; 나는 강력한 서버처럼 보였으므로 승객을 선택합니다. Ruby/Rails/Padrino 씬에 익숙하지 않으며, 일반적으로 Windows 시스템에서 작동합니다. IIS에서 Ruby를 제공하려고 시도하거나 심지어 Windows에서 Apache를 제공하려고 시도해도 작동하지 않습니다. 단순화하기 위해 서버를 구축해야하는 더 나은 플랫폼을 제안 할 수 있습니까? 여러 사이트를 호스팅 할 예정이며 대부분의 앱은 Padrino 기반이지만 일부 레일스가 될 것입니다. 아파치를 거치지 않고 Sinatra 앱을 실행하기 위해 '승객 출발'을 시작하면 페이지가 제대로 게재됩니다. – Hamptonite

+0

여객은 서로 완전히 분리 된 3 가지 모드를 가지고 있습니다. Apache 모드, Nginx 모드 및 독립 실행 형 모드입니다. '승객 출발'은 독립 실행 형 모드에서만 실행됩니다. 이것은 설명서에 설명되어 있습니다. – Hongli