Rails использует различные параметры URL по умолчанию в представлениях против контроллеров? - PullRequest
1 голос
/ 29 апреля 2020

Почесывая голову над этим.

Недавно открыл новый обратный прокси-сервер для нашего сайта через nginx для поддержки нового домена. Когда вы заходите через old.server.com или new.server.com, вы запускаете наш бэкэнд.

Если вы заходите через old.server.com, все помощники URL работают нормально и выдают действительные абсолютные URL-адреса. Но если вы нажмете через new.server.com (новый хост обратного прокси-сервера), то помощники по URL работают корректно только в представлениях. Помощники URL-адресов, используемые в контроллерах, используют имя хоста плюс фактический порт единорога - что неверно для URL-адресов, которые мы хотим отправить.

Еще более запутанно, это только в случае с контроллерами. По мнению, это работает правильно во всех случаях. Чтобы это работало в контроллерах при использовании new.server.com, мне необходимо переопределить метод default_url_options в ApplicationController.

Да, у меня правильно настроены конфигурации Rails.application.routes.default_url_options[:host] и Rails.application.routes.default_url_options[:protocol].

Я чувствую, что, возможно, пропустил пересылку необходимого заголовка в обратном прокси-сервере, но не понял этого. Но что более важно, почему представления и контроллеры используют разные контексты для генерации абсолютных URL-адресов?

ОБНОВЛЕНИЕ:

Разница между двумя хостами, по-видимому, заключается в значении, предоставляемом обратным прокси-сервером для заголовок хоста. «Старый» прокси отправлял хост publi c, а «новый» прокси ничего не отправлял. Rails, по-видимому, использует заголовок Host при построении URL-адресов при отсутствии явных данных. Чтобы это исправить, мне нужно либо правильно установить заголовок хоста, либо внедрить метод default_url_options в моем контроллере.

Итак, теперь у меня есть рабочий код, но он кажется действительно плохой идеей (TM) что контроллеры и представления не используют один и тот же код / ​​настройку для создания URL. Это просто стандартные рельсы, или я пропустил какую-то конфигурацию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...