我在Rails 3.2.13中使用了“faye” gem。在开发中,我在localhost:9292上运行faye,在localhost:3000上运行我的应用程序。我可以通过命令行中的curl请求激活弹出窗口,但无法在我的应用程序中建立连接。我在控制台中遇到的错误是:

WebSocket与'ws://localhost:9292/faye'的连接失败:WebSocket握手期间出错:缺少'Upgrade' header

我正在尝试在我的application.js文件中定义faye的 header :

$(function() {
  var faye = new Faye.Client("http://localhost:9292/faye");
  faye.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");
  faye.subscribe('/messages', function (data) {
  alert(data);
  });
});

这是添加标题的正确方法吗?

我在这里找到了类似问题的讨论:https://github.com/faye/faye/issues/222在这种情况下,错误似乎与未加载ssl设置有关。我检查了我的机架 gem 的lib目录,发现
def ssl?
  scheme == 'https'
end

好像很好我怎么知道设置是否被正确加载?

任何关于下一步寻找线索的线索将不胜感激。

最佳答案

在关注Ryan Bates的railscast时,我遇到了同样的问题:
http://railscasts.com/episodes/260-messaging-with-faye
Faye Web套接字服务器需要适配器才能在Thin Web服务器上运行并发送升级头。
将此行添加到Faye机架文件(.ru)将通过机架中间件加载适配器:Faye::WebSocket.load_adapter('thin')我在这里找到了这个解决方案:
https://github.com/ryanb/private_pub/issues/39#issuecomment-4225647

关于ruby-on-rails - Websocket header 丢失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18286228/

10-10 06:07