1

我有一个通过 Faye 提供实时功能的 rails 应用程序。我的客户将通过example.com:9292/faye访问 Faye 服务器。我没有使用该地址并显示我机器的开放端口,而是尝试添加一个机架中间件,并通过使用“机架代理”gem,将我的example.com/faye请求代理到example.com:9292/faye。我的 Rails 中间件代码如下所示:

class FayeProxy < Rack::Proxy
  def rewrite_env(env)
    request = Rack::Request.new(env)
    if request.path =~ %r{^/faye}
      env["HTTP_HOST"] = "localhost:9292"
    end
    env
  end
 end

此外,我将中间件添加到config/application.rb by config.middleware.use "FayeProxy",但是当我运行我的 rails 服务器时,出现以下错误:

/gems/ruby-1.9.3-p194/gems/rack-proxy-0.5.0/lib/rack/proxy.rb:12:in 'initialize': 未定义方法'key?' 对于 # (NoMethodError)

即使我删除了 meta_request gem,我也会得到

*/gems/ruby-1.9.3-p194/gems/rack-proxy-0.5.1/lib/rack/proxy.rb:12:in initialize': undefined methodkey?' 对于 # (NoMethodError) *

如果有人以前经历过这种情况或知道解决方案,我们将不胜感激。

Ps 我使用的是 Rails 3.2.13,机架 1.4.5,机架代理 0.5.1。

4

2 回答 2

1

似乎机架代理不应被视为中间件,而应通过此处所述的路由安装:http: //inductor.induktiv.at/blog/2010/05/23/mount-rack-apps-in-轨道-3/ .

于 2013-10-06T06:45:00.013 回答
0

我知道这很旧,但我只是遇到了类似的问题,但我怀疑您faye_proxy.rb所在的文件夹默认情况下不包含在 rails 中。

添加一个初始化程序,其中可能./config/initializers/proxy.rb包含 require "#{Rails.root}/lib/faye_proxy.rb" 替换lib为您放置代理的任何位置。

于 2017-05-04T19:01:37.710 回答