Конечная причина этой путаницы лежит в ActionPack:
- ActionDispatch :: TestRequest
- ActionDispatch :: Http :: URL
например. если вы установите порт (ActionDispatch :: TestRequest)
def port=(number)
@env['SERVER_PORT'] = number.to_i
end
например. затем вы читаете его (ActionDispatch :: Http :: URL)
def raw_host_with_port
if forwarded = env["HTTP_X_FORWARDED_HOST"]
forwarded.split(/,\s?/).last
else
env['HTTP_HOST'] || "#{env['SERVER_NAME'] || env['SERVER_ADDR']}:#{env['SERVER_PORT']}"
end
end
Настройка SERVER_PORT вступит в силу только в том случае, если вы еще не настроили SERVER_NAME, HTTP_X_FORWARDED_HOST или HTTP_HOST.
Мой основной обходной путь для настройки порта состоял в том, чтобы добавить порт к хосту - потому что request.port обычно не делает то, что вы хотите.
например. установить порт
request.host = 'example.com:1234'
Реальный ответ - прочитать код в ActionPack; это довольно просто.