17

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

WebSocket 连接到“ws://localhost:9292/faye”失败:WebSocket 握手期间出错:“升级”标头丢失

我正在尝试在我的 application.js 文件中为 faye 定义一个标头:

$(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 设置有关。我检查了我的 rack gem 的 lib 目录,发现

def ssl?
  scheme == 'https'
end

这似乎很好。我如何知道设置是否未正确加载?

任何关于下一步看哪里的线索将不胜感激。

4

1 回答 1

35

我在关注 Ryan Bates 的 railscast 时遇到了同样的问题: http: //railscasts.com/episodes/260-messaging-with-faye

Faye Web 套接字服务器需要一个适配器才能在 Thin Web 服务器上运行并发送升级标头。

将此行添加到您的 Faye rackup 文件 ( .ru) 将通过 rack 中间件加载适配器:

Faye::WebSocket.load_adapter('thin')

我在这里找到了这个解决方案: https ://github.com/ryanb/private_pub/issues/39#issuecomment-4225647

于 2013-10-17T06:02:30.593 回答