request.subdomain не устанавливается в Rails 3 во время условной маршрутизации

Я пытаюсь настроить субдомены в Rails 3 согласно скринкасту Райана Бейтса на субдоменах. Однако это не работает для меня. У меня есть следующая настройка:

# routes.rb
constraints(Subdomain) do
  get 'devices' => 'devices#all'
end

# lib/subdomain.rb
class Subdomain
  def self.matches?(request)
    # binding.pry
    request.subdomain.present? && request.subdomain == "admin"
  end
end

Загрузка URL-адреса admin.localhost:3000/devicesдолжна перенаправить меня на devices#all, однако я получаю ошибку маршрутизации Ошибка маршрутизации Маршрут не соответствует [GET] "/devices". Очевидно, моя маршрутизация не работает.

Я устанавливаю сеанс отладки pryс комментарием выше, и он срабатывает, так что мое ограничение работает, но я получаю следующий результат:

[1] pry(Subdomain)> request.subdomain
=> ""
[2] pry(Subdomain)> request.subdomains
=> []
[3] pry(Subdomain)> request.host
=> "admin.localhost"

Таким образом, рельсы не принимают административную часть URL-адреса и поместить ее в переменную субдомена. Хотя я мог бы легко просто использовать значение хоста для фильтрации маршрутов администратора, я бы хотел, чтобы все было чисто и правильно.

Почему rails не устанавливает значение поддомена?


Редактировать

Оба jdoeи coreywardверны в своих ответах. Меня сбивало с толку то, что я также использовал powи xip.ioдля доступа к сайту и получал ту же ошибку. Это было странно, потому что http://admin.app_name.192.168.1.68.xip.io/devicesимеет tld > 1. Дело в том, что субдомен для xipбыл admin.имя_приложения.192.168.1.68, который также не работает, учитывая логику совпадений и не выполняет маршрутизацию.

5
задан Community 23 May 2017 в 12:31
поделиться