We have been using ActionCable on Heroku for some time, and overall it works well. However, we see the H15 Idle Connection
error many times per day. They always have path=/cable
and a long service
time, so the connection was definitely live and healthy for a while.
Dec 2016 08:32:22.057 heroku router - - at=error code=H15 desc="Idle connection"
method=GET path="/cable" host=<our host> dyno=web.2 connect=1ms service=928755ms status=503
I believe our setup is very standard, and closely follows the Rails docs for ActionCable:
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user
end
protected
def find_verified_user
if current_user = User.find_by(id: cookies.signed[:user_id])
current_user
else
# reject_unauthorized_connection
end
end
end
end
We have three simple channels like this:
class ActivitiesChannel < ApplicationCable::Channel
def subscribed
stream_from "activities_#{current_user.id}" if current_user
end
end
Edit to Add - Javascript code:
app/assets/javascripts/channels/setup.js
:
//= require cable
this.App || (this.App = {});
App.cable = ActionCable.createConsumer();
app/assets/javascripts/channels/notifications.js
:
App.notifications = App.cable.subscriptions.create('NotificationsChannel', {
received: function(data) {
return this.showMessage(data);
},
showMessage: function(data) {
showNotice(data.message);
}
});
I'm fairly new with ActionCable and WebSockets, so I'm not sure how to troubleshoot this one. We are running Rails 5.0.0.1 with Ruby 2.3.1
Any help, context, or troubleshooting tips would be much appreciated!