2014-04-23 2 views
1

요청이 시작될 때 일부 텍스트를 렌더링 한 다음 끝에 다른 텍스트를 렌더링하려고합니다.Rails 4 응답에 응답

이 내가 그것을 할 것을 시도하고 어떻게

내가 두 번 렌더링이라고 때문에 나와 함께 화가됩니다
class DevelopmentController < ApplicationController 
    skip_before_filter :require_login 

    before_action { not_found! unless Rails.env.development? } 

    def pry 
    render text: 'Go to your server, a pry session awaits!', stream: true 
    require 'pry' 
    binding.pry 
    render text: 'Pry session complete.' 
    end 
end 

: AbstractController::DoubleRenderError

을 나는 또한 작동 스트림에 직접 작성 시도 감각은 결국 렌더링하는,하지만 요청이 종료 될 때까지 놀리려는 전에 텍스트 (예 : 스트리밍되지 않음) 렌더링하지 않습니다 다음 STR 어쩌면

def pry 
    response.stream.write 'Go to your server, a pry session awaits!' 
    require 'pry' 
    binding.pry 
    response.stream.write 'Pry Complete' 
end 

생각을 eam을 플러시 할 필요가 있지만 플러시 방법이 없습니다. IDK입니다.

답변

2

스트림 할 수 있으려면 include ActionController::Live을 포함해야합니다. sleep과 함께 작동하지만 어떤 이유로 든 byebug와 작동하지 않지만 완료되면 연결이 닫혀 있는지 확인해야합니다. 그렇지 않으면 종료해야합니다. 열려있을거야. 여기에 예를

class MyController < ActionController::Base 
    include ActionController::Live 
    def stream 
    100.times { 
     response.stream.write "<p>#{Time.now}</p>" 
     sleep 1 
    } 
    ensure 
    response.stream.close 
    end 
end 

내가 대신 스트림의 다운로드를 묻는 메시지가 예에서 제공하는 사용자들은 헤더를 추가 할 때 모듈은 어떤 이유로, documented here입니다입니다.

+0

흠, 나도 잠을 잘 수는 없지만 (크롬과 컬을 모두 시도했지만 모두 완료 될 때까지 응답을 보지 못했습니다 (예 : 100 초 후) –

+0

당신은 그걸 들었습니까? –

+0

이 경우가 아니라, 나는 정확히 너의 것을 좋아한다. (그리고 나서 b/c의 값을 낮춘다. 100 초가 긴 시간이다.) 그리고 나서 그들의 헤더와 함께'ActionController :: Live :: SSE'의 예제를 시도했다. 레일즈 4.2.0, 중요한 점은 IDK –