¿Cómo encontrar el puerto local en el que se está ejecutando una instancia de raíles?

Así que me gustaría que las instancias de mi aplicación Rails se registren en un tipo de “Estoy arriba” con el que estoy jugando, y me gustaría que pueda mencionar en qué puerto local se está ejecutando. Parece que no puedo encontrar la forma de hacerlo; de hecho, descubrir su IP es complicado y necesita un truco.

Pero no hay problema, tengo la IP, pero ¿cómo puedo encontrar en qué puerto se está ejecutando mi servidor mestrel / thin / webrick?

Para ser súper explícito, si inicio una aplicación de Rails utilizando script / server -p 3001, ¿qué puedo hacer para extraer ese 3001 dentro de la aplicación?

Puede llamar a Rails::Server.new.options[:Port] para obtener el puerto en el que se está ejecutando su servidor Rails. Esto analizará los args -p 3001 del comando de rails server de los rails server , o de forma predeterminada al puerto 3000 .

Desde dentro de cualquier acción del controlador, verifique el contenido de request.port , así:

 class SomeController < ApplicationController def some_action raise "I'm running on port #{request.port}." end end 

Dos caminos.

Si está respondiendo a una solicitud en un controlador o vista, use el objeto de solicitud:

 request.port 

Si está en un inicializador y no tiene acceso al objeto de solicitud, use el hash de opciones del servidor:

 Rails::Server.new.options[:Port] 

Para el servidor de desarrollo de Rails 5.1.

 if Rack::Server.new.options[:Port] != 9292 # rals s -p PORT local_port = Rack::Server.new.options[:Port] else local_port = (ENV['PORT'] || '3000').to_i # ENV['PORT'] for foreman end 

Jugué un poco con esto, y esta podría ser la mejor solución para Rails 5.1:

 Rails::Server::Options.new.parse!(ARGV)[:Port]