Rails/Rack ... Rack :: ReverseProxy导致请求超时

hal*_*ley 5 rack reverse-proxy ruby-on-rails heroku

我想我已经过头了,无法弄清楚如何调试或从哪里开始?!! 任何指导将不胜感激!

问题:

  • 开发环境:一切正常
  • 制作:我收到"请求超时"错误

目标:

让"www.site.com/blog"显示"blog.site.com"中的内容,而无需重定向/更改浏览器URL

建立

  • www.site.com是Heroku上的Rails应用程序
  • blog.site.com是Bluehost上的WordPress

所以我无法访问服务器配置

途径

使用rack-reverse-proxy gem,如何使用子目录而不是子域?jplewicke

履行

的Gemfile

gem "rack-reverse-proxy", :require => "rack/reverse_proxy"
Run Code Online (Sandbox Code Playgroud)

config.ru(在运行AppName :: Application 之前)

use Rack::ReverseProxy do
  reverse_proxy(/^\/blog(\/.*)$/,'http://blog.site.com$1',
  opts = {:preserve_host => true})
end
Run Code Online (Sandbox Code Playgroud)

配置/ routes.rb中

match "/blog" => redirect("/blog/")
Run Code Online (Sandbox Code Playgroud)

结果/问题

它在我的机器上开发效果很好,但是当我把它投入生产时它会超时.它不仅超时,而且之后整个应用程序被挂起或者其他东西,即每个请求都超时www.site.com(在尝试blog.site.com之前有效).大约5-10分钟后,www.site.com再次运作,但blog.site.com超时.

日志

2013-03-05 05:54:19 + 00:00应用web.1 - - 2013年开始获取66.108.140.26/cpe-66-108-140-26.nyc.res.rr.com获取"/资源" -03-05 05:54:19 +0000

2013-03-05 05:54:19 + 00:00 heroku router - - at = info method = GET path =/blog host = www.site.com fwd ="66.108.140.26/cpe-66-108-140- 26.nyc.res.rr.com"dyno = web.1 queue = 0 wait = 0ms connect = 1ms service = 7ms status = 301 bytes = 105

2013-03-05 05:54:49 + 00:00 heroku router - - at = error code = H12 desc ="Request timeout"method = GET path =/blog/host = www.site.com fwd ="66.108. 140.26/cpe-66-108-140-26.nyc.res.rr.com"dyno = web.1 queue = 0ms wait = 0ms connect = 2ms service = 30000ms status = 503 bytes = 0

调试

我试着在生产中打开调试......

配置/环境/ production.rb

config.consider_all_requests_local = true
config.log_level = :debug
Run Code Online (Sandbox Code Playgroud)

但没有什么真正只是一个通用,

应用程序错误...无法提供您的页面...再试一次....检查日志.

这是唯一有意义的,因为它在开发中起作用

关于该怎么做的任何建议或想法?谢谢!

PyW*_*ign 0

我刚刚在 Rails 4 上设置了它。它正在使用以下命令在所有子目录上工作:

use Rack::ReverseProxy do
  reverse_proxy_options preserve_host: true
  reverse_proxy '/blog', 'http://grav.somedomain.net/'
end
Run Code Online (Sandbox Code Playgroud)

但当访问没有子目录的 /blog 时,它会响应永久重定向(301)。

要解决该问题,只需将 /blog 重写为 /blog/home 并确保在您的博客中添加此别名链接!

require 'rack/rewrite'
use Rack::Rewrite do
  rewrite   '/blog',  '/blog/home'
end
Run Code Online (Sandbox Code Playgroud)

也许有人可以告诉我们这个假设是否正确:博客引擎经常在主页上进行重定向,这可能会破坏代理。

祝你玩得开心!