Я действительно изо всех сил пытаюсь понять поведение маршрутизации, которое я вижу с приложением Rails 3, поскольку оно связано с методами Passenger и помощниками маршрутизации.Вот краткий обзор:
Когда пользователь регистрируется на моем сайте, я хотел бы отправить подтверждение по электронной почте, чтобы убедиться, что пользователь отправил действительный адрес электронной почты.Итак, я настроил почтовую программу на отправку пользователю URL-адреса с каким-то магическим токеном, тем самым доказав, что они получили отправленное мной электронное письмо.URL в теле письма генерируется с помощью вспомогательного метода маршрутизации (в данном случае verify_url("a1b2c3")
), и URL вставляется в электронное письмо соответствующим образом как:
http://localhost:3000/verify/a1b2c3
Все это прекрасно работает под localhost:3000
без заминки.Поэтому, как ответственный разработчик, я в следующий раз перевожу свое приложение в удаленную среду контроля качества и проверяю, что все по-прежнему работает.Мой хостинг-провайдер использует Passenger, и я настроил его так, чтобы к моей среде контроля качества можно было обращаться следующим образом:
http://my.url/qa
Это делается путем установки RailsBaseURI в значение /qa
в соответствующем файле .htaccess
.Итак, я пытаюсь зарегистрироваться на сайте в моей среде QA и надеюсь, что вспомогательный метод verify_url
генерирует следующий URL:
http://my.url/qa/verify/a1b2c3
Однако вместо этого я получаю:
http://my.url/verify/a1b2c3
Заметили явное отсутствие ссылки на путь 'qa'?Я искал различные блоги и руководства в поисках ответа, и я видел следующие предложения:
- Установите переменную среды, такую как
ENV['RAILS_RELATIVE_URL_ROOT']
- Установите
ActionController::Base.relative_url_root
в моем environment/qa.rb
- Добавить карту в мое
config.ru
, чтобы инициализировать мое приложение по определенному пути - Обернуть мои маршруты в область действия
Однако,Кажется, что каждый из них либо устарел (первые две опции), либо заканчивает тем, что выдает избыточную информацию о пути (вторые две опции) следующим образом:
http://my.url/qa/qa/verify/a1b2c3
Может кто-нибудь сказать мне правильный способ установить этотак, что когда я звоню verify_url("a1b2c3")
, я на самом деле получаю правильный URL, включая относительный путь для моей среды QA?В идеале я бы хотел как-то установить это значение в environments/qa.rb
, чтобы мне вообще не приходилось менять свое приложение при переходе из одной среды в другую.
Заранее спасибо!