(Rails 2.3) Upstream mongrel cluster: how to find out mongrel instance (port) which handles request

5 views
Skip to first unread message

Thomas

unread,
Dec 8, 2009, 6:50:52 PM12/8/09
to Ruby on Rails: Talk
For debugging purpose I find it helpful to see which mongrel out of an
upstream cluster, specifically which port number, handles an actual
request. For example, let the load balancer operate on port 3000
(development) and the upstream mongrel cluster operating on ports 4000
upto 4002, then I would like to see not only the port 3000 (eg. using
request.host_with_port in a controller) but also the port number of
the actual mongrel instance.

With Rails 2.1 I used session.cgi to spot the mongrel port (4000, 4001
or 4002), however, I was not able to figure this out in Rails 2.3
which is using the rack middleware.

Any idea, how to do it?

Greetings and thanks!
Thomas

Kristian Hellquist

unread,
Dec 9, 2009, 3:46:44 AM12/9/09
to rubyonra...@googlegroups.com
Cant you just do `request.server_port' in controller?

2009/12/9 Thomas <thomas...@gmail.com>:
> --
>
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
>
>
>

Thomas

unread,
Dec 9, 2009, 4:56:56 AM12/9/09
to Ruby on Rails: Talk
Hi Kristian, this also results in port number '3000', and not in the
port number of the upstream mongrel.


On 9 Dez., 09:46, Kristian Hellquist <kristian.hellqu...@gmail.com>
wrote:
> Cant you just do `request.server_port'  in controller?
>
> 2009/12/9 Thomas <thomas.net...@gmail.com>:

Kristian Hellquist

unread,
Dec 9, 2009, 8:06:08 AM12/9/09
to rubyonra...@googlegroups.com
Does request.env.inspect gives you any hint?

2009/12/9 Thomas <thomas...@gmail.com>:

Thomas

unread,
Dec 9, 2009, 3:56:48 PM12/9/09
to Ruby on Rails: Talk
This helped!

Though, a bit strange, the only "hint" for the mongrel port is in
request.env["rack.errors"] which is an IO object pointing the logfile
of the mongrel. It is something like "/somepath/mongrel.400x.log".
Hence

request.env["rack.errors"].inspect[/mongrel\.\d+/]

verboses the mongrel port of the request.

Thanks, this solves my problem, Thomas


On 9 Dez., 14:06, Kristian Hellquist <kristian.hellqu...@gmail.com>
wrote:
> Does request.env.inspect gives you any hint?
>
> 2009/12/9 Thomas <thomas.net...@gmail.com>:

ak

unread,
Dec 24, 2009, 6:41:39 PM12/24/09
to Ruby on Rails: Talk
Thomas, I'm still on Rails 2.1 and would like to do exactly what you
were doing? What is the Rails 2.1 way? Call
session.cgi.handler.listener.port ? Will that give the port number of
the actual instance?

Thomas

unread,
Dec 26, 2009, 11:37:43 AM12/26/09
to Ruby on Rails: Talk
I was using the following lines in my _debug.html.erb partial:

<% session.cgi.inspect.split(/,/).each{ |key| @mongrel_port = key
if(key =~ /@port/)} %>
<%= @mongrel_port %>

Greetings, Thomas

Reply all
Reply to author
Forward
0 new messages