Подтвердить что ты не робот

Как найти локальный порт, на котором запущен экземпляр rails?

Итак, я хотел бы, чтобы мои экземпляры приложений Rails регистрировались на "Я вверх", с которым я играю, и я хотел бы, чтобы он мог указать, в каком локальном порту он работает. Кажется, я не могу найти, как это сделать - на самом деле просто выяснение его IP-кода сложно и требует немного взлома.

Но не проблема, у меня есть IP-адрес, но как я могу найти, на каком порту мой mongrel/thin/webrick сервер работает?

Чтобы быть супер явным, если я запускаю приложение rails с помощью script/server -p 3001, что я могу сделать, чтобы вытащить это 3001 внутри приложения.

4b9b3361

Ответ 1

Изнутри любого действия контроллера проверьте содержимое request.port, таким образом:

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

Ответ 2

Вы можете вызвать Rails::Server.new.options[:Port], чтобы получить порт, на котором запущен ваш Rails-сервер. Это проанализирует аргументы -p 3001 из вашей команды rails server или по умолчанию - порт 3000.

Ответ 3

Два способа.

Если вы отвечаете на запрос в контроллере или представлении, используйте объект запроса:

request.port

Если вы находитесь в инициализаторе и не имеете доступа к объекту запроса, используйте хеш-параметры сервера:

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

Ответ 4

Для сервера разработки 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

Ответ 5

Я немного поиграл с этим, и это может быть лучшим решением для Rails 5.1:

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