17

Rails 3.2.13 で「faye」gem を使用しています。開発中、localhost:9292 で faye を実行し、localhost:3000 でアプリを実行しています。コマンド ラインから curl リクエストを使用してポップアップ ウィンドウをアクティブにすることはできますが、アプリ内から接続を確立できません。コンソールに表示されるエラーは次のとおりです。

'ws://localhost:9292/faye' への WebSocket 接続に失敗しました: WebSocket ハンドシェイク中にエラーが発生しました: 'Upgrade' ヘッダーがありません

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 設定がロードされていないことに関連しているようです。ラック 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 ラックアップ ファイル ( .ru) に追加すると、ラック ミドルウェア経由でアダプターが読み込まれます。

Faye::WebSocket.load_adapter('thin')

ここでこの解決策を見つけました: https://github.com/ryanb/private_pub/issues/39#issuecomment-4225647

于 2013-10-17T06:02:30.593 に答える