gpt4 book ai didi

ruby-on-rails - Faye 在 Heroku 上 : Cross-Domain Issues

转载 作者:行者123 更新时间:2023-12-04 21:47:36 25 4
gpt4 key购买 nike

我目前在 Heroku 上同时托管我的 rails 应用程序和 faye-server 应用程序。 faye 服务器已从此处克隆 ( https://github.com/ntenisOT/Faye-Heroku-Cedar ) 并且似乎运行正常。我禁用了 websockets,因为 Heroku 不支持它们。尽管 Faye 的网站声称:

“Faye 客户端和服务器透明地支持跨域通信,因此您的客户端可以连接到您喜欢的任何域上的服务器,而无需进一步配置。”

当我尝试发布到 faye channel 时,我仍然遇到此错误:

    XMLHttpRequest cannot load http://MYFAYESERVER.herokuapp.com. Origin http://MYAPPURL.herokuapp.com is not allowed by Access-Control-Allow-Origin.

我已阅读有关 CORS 并尝试实现此处概述的一些解决方案: http://www.tsheffler.com/blog/?p=428但到目前为止还没有运气。我很想听听以下人的意见:

1) 有一个在 Heroku 上托管的 rails 应用程序
2) 有一个 faye 服务器托管在 Heroku 上
3)他们两个是否成功沟通了!

非常感谢。

最佳答案

在过去一个小时左右的时间里,我刚刚在 heroku 上托管了我的 faye 和 rails 应用程序……这是我的观察:

  • 如果您使用 env 变量,请确保在所有服务器上都设置了 FAYE_TOKEN。
  • 禁用您已经完成的 websockets... client.disable(...)对我不起作用,我用了 Faye.Transport.WebSocket.isUsable = function(_,c) { c(false) }反而。
  • 这可能适用于您,也可能不适用于您,但对我来说是最难追踪的事情......在我的开发环境中,我的应用程序运行的端口将被添加到我的 faye 服务器的指定主机名的末尾.. . 但这似乎导致了生产中的通信失败。我通过在 application_controller.rb 中创建一个 broadcast_server_uri 方法来解决这个问题,该方法在必要时处理端口的包含,然后在我启动新 channel 的任何地方使用它。

  • ....
    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://...无论如何,但这应该仍然可以很好地让您畅通无阻。 (虽然我很想学习一个更清洁的解决方案......)

    关于ruby-on-rails - Faye 在 Heroku 上 : Cross-Domain Issues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11851182/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com