Я пытаюсь настроить субдомены в 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
, который также не работает, учитывая логику совпадений и не выполняет маршрутизацию.