Ответ 1
Изнутри любого действия контроллера проверьте содержимое request.port, таким образом:
class SomeController < ApplicationController
def some_action
raise "I'm running on port #{request.port}."
end
end
Итак, я хотел бы, чтобы мои экземпляры приложений Rails регистрировались на "Я вверх", с которым я играю, и я хотел бы, чтобы он мог указать, в каком локальном порту он работает. Кажется, я не могу найти, как это сделать - на самом деле просто выяснение его IP-кода сложно и требует немного взлома.
Но не проблема, у меня есть IP-адрес, но как я могу найти, на каком порту мой mongrel/thin/webrick сервер работает?
Чтобы быть супер явным, если я запускаю приложение rails с помощью script/server -p 3001, что я могу сделать, чтобы вытащить это 3001 внутри приложения.
Изнутри любого действия контроллера проверьте содержимое request.port, таким образом:
class SomeController < ApplicationController
def some_action
raise "I'm running on port #{request.port}."
end
end
Вы можете вызвать Rails::Server.new.options[:Port]
, чтобы получить порт, на котором запущен ваш Rails-сервер. Это проанализирует аргументы -p 3001
из вашей команды rails server
или по умолчанию - порт 3000
.
Два способа.
Если вы отвечаете на запрос в контроллере или представлении, используйте объект запроса:
request.port
Если вы находитесь в инициализаторе и не имеете доступа к объекту запроса, используйте хеш-параметры сервера:
Rails::Server.new.options[:Port]
Для сервера разработки 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
Я немного поиграл с этим, и это может быть лучшим решением для Rails 5.1:
Rails::Server::Options.new.parse!(ARGV)[:Port]