render_to_string
doesn't work well in ActionController::Live
.
Because render_to_string
modifies response_body
and restores it.
But #response_body=
regenerates response.stream
and ActionController::Live
's overridden #response_body=
closes response.stream
, so response.stream.write
won't work after any render_to_string
in ActionController::Live
.
def render_to_string(*)
orig_stream = response.stream
super
ensure
if orig_stream
response.instance_variable_set(:@stream, orig_stream)
end
end
Above code works well as monkey patch to fix this issue.
I requested to pull this to upstream: https://github.com/rails/rails/pull/11623