我正在尝试根据Ryan Bates 在 subdomains 上的截屏视频在 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
加载 urladmin.localhost:3000/devices
应该将我路由到devices#all
,但是我收到路由错误Routing Error No route matches [GET] "/devices"
显然我的路由不起作用。
我在上面的注释设置了一个pry
调试会话,它被命中,所以我的约束正在工作,但我得到以下输出:
[1] pry(Subdomain)> request.subdomain
=> ""
[2] pry(Subdomain)> request.subdomains
=> []
[3] pry(Subdomain)> request.host
=> "admin.localhost"
因此,rails 没有获取 url 的管理部分并将其放入子域变量中。虽然我可以轻松地使用主机值来过滤到管理路由,但我想保持干净和正确。
为什么 rails 没有设置子域值?
编辑
jdoe和coreyward的答案都是正确的。让我失望的是,我也在使用pow
并xip.io
访问该网站并遇到同样的错误。这很奇怪,因为http://admin.app_name.192.168.1.68.xip.io/devices
tld > 1。发生的事情是 was 的子域xip
,admin.app_name.192.168.1.68
考虑到匹配逻辑,它也会失败并且不会路由。