過去 1 時間以内に、heroku でホストされている faye と rails アプリの通信を取得しました...ここに私の観察があります。
環境変数を使用している場合は、すべてのサーバーで FAYE_TOKEN が設定されていることを確認してください。
あなたがすでに行っているwebsocketsを無効にします...私にはうまくいきませんでした。代わりclient.disable(...)に使用しました。Faye.Transport.WebSocket.isUsable = function(_,c) { c(false) }
これはあなたに当てはまるかもしれないし、当てはまらないかもしれませんが、私にとって追跡するのが最も難しいことでした. . しかし、これにより本番環境での通信に失敗したようです。application_controller.rb に、必要に応じてポートの組み込みを処理する Broadcast_server_uri メソッドを作成することで、この問題を回避し、新しいチャネルをスピンアップするあらゆる場所でそれを使用しました。
....
class ApplicationController < ActionController::Base
def broadcast_server
if request.port.to_i != 80
"http://my-faye-server.herokuapp.com:80/faye"
else
"http://my-faye-server.herokuapp.com/faye"
end
end
helper_method :broadcast_server
def broadcast_message(channel, data)
message = { :ext => {:auth_token => FAYE_TOKEN}, :channel => channel, :data => data}
uri = URI.parse(broadcast_server)
Net::HTTP.post_form(uri, :message => message.to_json)
end
end
そして、私のアプリのjavascriptには、
<script>
var broadcast_server = "<%= broadcast_server %>"
var faye;
$(function() {
faye = new Faye.Client(broadcast_server);
faye.setHeader('Access-Control-Allow-Origin', '*');
faye.connect();
Faye.Transport.WebSocket.isUsable = function(_,c) { c(false) }
// spin off your subscriptions here
});
</script>
FWIW、 Access-Control-Allow-Origin の設定については強調しません。どちらの方法でも違いがないように見えるためです-XMLHttpRequest cannot load http://...関係なくわかりますが、ブロックを解除するのに十分に機能するはずです. (ただし、よりクリーンなソリューションを知りたいのですが...)