我有一个 Rails 应用程序服务器,它正在监听端口 9000,并通过 haproxy 进行调用。我所有来自该服务器的重定向都通过端口 9000 重定向回,而它们应该在端口 80 上发送回。
我正在使用 haproxy + nginx + 乘客的组合。有没有办法确保所有重定向都通过端口 80 发送,而不管实际服务器正在监听哪个端口?
我不在乎它是否是 haproxy、nginx、Passenger 或 Rails 更改。我只需要确保除非另有说明,大多数请求都被发送回端口 80。
谢谢!
最佳答案
就像 elektronaut 指出的那样,这可能应该在您的代理配置中处理。也就是说, ActiveSupport::UrlFor#url_for 有一些可能有用的信息。看看http://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/routing/url_for.rb
我认为归结为将两个参数传递给您的 url_for 和/或 link_to 调用。首先是:port => 123
参数,第二个是 :only_path => false
以便它生成完整的链接,包括域、端口等。
因此,在生成链接时,您可能会这样做:
link_to 'test', root_url(:port => 80, :only_path => false)
在创建自定义 url 时,您可能会这样做:
url_for :controller => 'test', :action => 'index', :port => 80, :only_path => false
对于重定向:
redirect_to root_url(:port => 80, :only_path => false)
我希望这会有所帮助,如果没有,您能否更具体地说明如何生成 URL、rails 为您生成什么以及您希望它生成什么。
更新:
我不知道这一点,但似乎您可以使用 url_for 为 URL 的 rails 生成设置默认值,生成链接和/或 URL 的所有其他内容都使用它。这里有一篇很好的文章:http://lucastej.blogspot.com/2008/01/ruby-on-rails-how-to-set-urlfor.html
或者给你总结一下:
将此添加到您的
application_controler.rb
def default_url_options(options)
{ :only_path => false, :port => 80 }
end
和这个:
helper_method :url_for
第一个块在 Controller 中设置默认值,第二个块导致 url_for 助手使用在 Controller 中找到的那个,因此默认值也适用于它。
关于ruby-on-rails - 发送重定向到特定端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3011715/