我的机架代理应用程序适用于不同的端口,但不是不同的URL

时间:2014-12-16 03:31:28

标签: ruby-on-rails ruby heroku proxy rack

我写了一个小机架应用程序使用rack-proxy使它看起来像在不同端口上运行的应用程序实际上是一个域的不同子目录。它有效。

如果我在notes上的3001photos3002上运行localhost:3000/notes,那么我就可以转到localhost:3000/photosenv["HTTP_HOST"],一切正常。

这对本地运行它只有帮助。但是,如果我想在Heroku上运行相同的设置,我需要能够代理到不同的URL,而不仅仅是不同的端口。因此,当我将代码从http://localhost:3001更改为/notes env["HTTP_HOST"],而http://sbbme-note.herokuapp.com代替/notes Errno::EADDRNOTAVAIL at /notes Can't assign requested address - connect(2) for "http://sbbme-note.herokuapp.com" port 0 时,机架会爆炸在我身上。

我认为这将是Just Work™。不幸的是,我错过了一些东西。

master

完整的堆栈跟踪就在这个要点中。

https://gist.github.com/veganstraightedge/6d840377bf20b4b5f5db

回购是homesteading/homesteading-router-rackheroku-router分支仅在本地开发模式下工作(localhost上有多个端口)。 heroku-router分支是我尝试使用不同(子)域而不仅仅是不同端口的地方。 gem install homesteading homesteading new mysite cd mysite homesteading server open http://localhost:3000 是一个爆炸的人(参见上面的要点)。

如果你想安装它并在自己的机器上试用,应该工作:

{{1}}

我真的很接近能够用我在Homesteading的应用程序方法取代我多年来的单轨单轨。此路由器是最后一个主要阻止程序。任何帮助将不胜感激。

PS。我的初始版本是基于这篇博文(livsey dot org / blog / 2012/02/23 / using-rack-proxy-to-serve-multiple-rails-apps-from-the-domain-and-port)这个Stack Overflow问题/答案(stackoverflow dot com / questions / 11057905 / how-do-i-use-rackproxy-within-rails-to-proxy-requests-to-a-specific-path-to-an&#34 ;如何在Rails中使用Rack :: Proxy将请求代理到另一个应用程序的特定路径 - Stack Overflow")。

2 个答案:

答案 0 :(得分:0)

查看设置和堆栈跟踪,看起来代理正在尝试连接到端口0上的sbbme-note应用程序。尝试添加

ENV['SERVER_PORT'] = '80'

您也可以考虑在heroku上使用nginx构建包,以此方式实现转发代理。我已经使用this build pack作为基本转发代理,并且效果很好。还有其他nginx build packs旨在连接到您的应用程序服务器(如独角兽),这可能对此用途也很有用。

答案 1 :(得分:0)

解决方案是Lukas的建议和修复我最初做的事情的组合。

我添加了这个(按照Lukas的建议)。

env['SERVER_PORT'] = 80

我从http://

中删除了env["HTTP_HOST"]

所以,这个:

env["HTTP_HOST"] = "http://#{app}"

成了这个:

env["HTTP_HOST"] = app

感谢您的帮助,Lukas!