我正在尝试使用websocket-rails在他们进入我的网站时广播实时路线。但是,我无法发布任何消息。我已经阅读了所有可以找到的帮助,而且我似乎无法找到解决方案。
以下是我在application.html.erb中的javascript:
var route_name = window.location.pathname + window.location.search;
$.post("/realtimeroutes",
{ data: { route_name: route_name} },
function(response) {
}
);
此数据将传递给rails控制器方法realtime_routes,如下所示:
def realtime_routes
puts '*** The Route Data is: ' + params[:data][:route_name]);
new_route = RouteCatcher.new(route_name: params[:data][:route_name]
if new_route.save
route = {route_name: params[:data][:route_name]}
puts '*** Right before the Message is sent ***'
WebsocketRails[:new_route].trigger('new', route)
puts '*** Right After the Message is sent ***'
render nothing: true
else
render nothing: true
end
end
到目前为止一切都很好。数据库中正在进行更新,并且前后消息都打印到控制台,但没有触发Websocket消息。
接下来我在realtime.html.erb中听到这个javascript:
var dispatcher = new WebSocketRails(window.location.host + '/websocket');
var channel = dispatcher.subscribe('new_route');
channel.bind('new', function(route) {
console.log('********** Inside Bind Event');
console.log('********** a new route '+ route.route_name +' arrived!');
});
绑定事件没有收到任何内容,当我在Chrome上查看控制台时,我得到:
'Uncaught ReferenceError: WebSocketRails is not defined'
所以我完全被困在这里,因为我已经按照我能找到的每一份文件,真的不知道该往哪里去。非常感谢任何帮助。
更新:这是一个初始化错误,因为WebSocketRails是在应用程序js的其余部分之前呈现的。
然而,现在我收到了错误:
WebSocket connection to 'ws://localhost:3000/websocket' failed: Error during WebSocket handshake: Unexpected response code: 301
在进一步阅读有关同一错误的其他人之后,似乎谨慎地提到我在生产中使用带有SSL的AWS elasticbeanstalk上的Puma。