Change ActionCable's URL on the Client
ActionCable provides a handy escape hatch for changing the url path of the cable in your frontend. In my case, I wanted to specify a token on the cable url so that I could preserve some in place functionality while also being able to use the Turbo::StreamsChannel
.
I did some source diving in turbo-rails
and found that turbo calls out to createConsumer
which comes from @rails/actioncable
.
And that's where I found this (part of which is pasted below with a subtle change for readers) -
export function createConsumer(url = getConfig("url") || "/cable") {
return new Consumer(url)
}
export function getConfig(name) {
const element = document.head.querySelector(`meta[name='action-cable-${name}']`)
if (element) {
return element.getAttribute("content")
}
}
You can place a meta tag for the cable url in your views; this will be picked up by Action Cable and Turbo -
<meta name="action-cable-url" content="/cable?foo=bar">
Tweet