Closed phiele closed 6 months ago
Thanks for the details! Let's think what could go wrong..
config.action_cable.url points to the AnyCable server and not to the Rails one
createConsumer is not imported
Are you using the @hotwired/turbo-rails
package then?
Let's check the browser dev tools and find the WS connection information; more precisely, we need to check the URL and who initiated the connection (in Chrome, open Network tab, filter by WS, probably, reload the page, find the request and check its "Initiator" tab for the source code, see below):
Thanks for your help @palkan!
Are you using the @hotwired/turbo-rails package then?
Yes.
Here's a screenshot of the request initiator chain:
Note that the domain has changed from https://dev.tech/ to https://dev.glazed.tech/ in the meantime. However, the configuration of my initial post is still the same.
So, the URL used by the browser is the same as you configured in config.action_cable.url
?
If so, the next question is how do you run anycable-go? Are you running Rails and AnyCable on the same machine or a separate one?
From the screenshot, I can see that the WS server hostname as the same as your Rails app hostname (your page is https://dev.glazed.tech/design_files/16
). If you're running them on the same server, you should probably add a port to the cable url, i.e., wss://dev.glazed.tech:8080/cable
.
So, the URL used by the browser is the same as you configured in config.action_cable.url?
Yes, it's wss://dev.glazed.tech/cable
Changing the CABLE_URL to wss://dev.glazed.tech:8080/cable
didn't fix it:
I'm running anycable-go on a dedicated WS server with ANYCABLE_HOST set to 0.0.0.0
:
When checking the anycable-go server health, it looks alright:
When checking the anycable-go server health, it looks alright:
Interesting, it has /anycable-go
namespace; so, probably, the correct WS url must be: wss://dev.glazed.tech/anycable-go/cable
?
True, I've no idea why I haven't tried adding the namespace before.
Changing the CABLE_URL to wss://dev.glazed.tech/anycable-go/cable
fixed it.
Thank you @palkan !
When setting up an anycable-go WS server in Digital Ocean, make sure to include its required route path in the config.action_cable.url
, e.g. wss://[your-domain]/[anycable-go-route]/cable
EDIT: Locally everything seems to be working now, besides getting this error:
However, in production the connection still keeps failing.
Environment:
anycable
gem version: 1.4.3I followed every step of the Exploring Rails 7, Hotwire and AnyCable speedy streams tutorial and already went through the documented troubleshooting, but somehow the Client connection still keeps failing in production.
1) config.action_cable.url points to the AnyCable server and not to the Rails one.
2) Make sure that action_cable_meta_tag is called before JS script is loaded.
here's the actual DOM element:
3) Make sure you do not pass incorrect URL to JS createConsumer question.
4) In case of using a reverse proxy (e.g. Nginx), check that it points to the correct server as well.
For the sake of completeness: anycable.yml
cable.yml
production.rb
Environment variables:
Logs:
Logs websocket:
Unfortunately, the other closed issues relating to the same problem haven't helped either.
Any clue what else I could try to debug?