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