Prevent html: escaping in broadcast later actions #362
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
hotwire-rails documents using an
html:
argument to broadcast HTML directly, bypassing the rendering mechanism.However, there's a catch: when using
html:
with a broadcast later action and a queue system, thehtml_safe
flag ofthe
html
argument might be lost in the serialization process. Specifically, the flag remains with queue backends that work in-process (likeinline
orasync
) but it's lost in others that serialize the payload to JSON (likeresque
or
sidekiq
).Also,
render
escapes thehtml:
param when it isn'thtml_safe
.The resulting effect is that the broadcast action works fine in development, but then fails when it's deployed to a production system.
This problem seems to have tripped a few people already.
The solution is giving the
html:
argument the same treatment as the existingcontent:
param. This works because the we are bypassingrender
and hence there's no escaping.