Rails子域路由

我正在尝试为pipe理页面设置子域路由。 然而,当使用admin.localhost我能够路由到子域就好了。 当我使用lvh.me我路由到正确的主页,虽然当使用admin.lvh.me我路由到相同的主页,而不是pipe理员login页面。

# config/routes.rb constraints(AdminSubdomain) do constraints subdomain: 'admin' do devise_for :admins devise_scope :admin do authenticated :admin do root to: 'admin_home#index', as: :authenticated_root end unauthenticated do root to: 'devise/sessions#new', as: :unauthenticated_root end end resources :example resources :example end end 

其他路由子域参数我试过了

 module: "admin", path: "/", constraints: lambda { |r| r.subdomain.split('.')[0] == 'admin' } do [...] # Additional routes end 

 constraints subdomain: 'admin' do [...] # Additional routes end 

然后用于AdminSubdomain类

 # lib/admin_subdomain.rb class AdminSubdomain def self.matches?(request) case request.subdomain when 'admin' true else false end end end 

我也尝试了admin_subdomain.rb的变体

 # lib/admin_subdomain.rb class AdminSubdomain def self.matches?(request) case request.subdomain when 'www', '', nil true else false end end end 

然后像这样包装admin_subdomain类:

 # config/routes.rb constraints(AdminSubdomain) do constraints subdomain: 'admin' do [...] # routes same as above end end 

所有非子域的页面都没有被路由约束所覆盖,我在一个分段部署中首先意识到了这个问题。 当我遇到没有链接到正确的子域相同的问题。 这是当我相信它可能是NGINX代理运行糟糕。

 # NGINX.conf {appname} == actual name upstream puma { server unix:///home/deploy/{appname}/shared/tmp/sockets/{appname}-puma.sock; } server { listen 80; listen [::]:80; # server_name localhost; root /home/deploy/{appname}/current/public; access_log /home/deploy/{appname}/current/log/nginx.access.log; error_log /home/deploy/{appname}/current/log/nginx.error.log info; location ^~ /assets/ { gzip_static on; expires max; add_header Cache-Control public; } try_files $uri/index.html $uri @puma; location @puma { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://puma; } error_page 500 502 503 504 /500.html; client_max_body_size 10M; keepalive_timeout 10; } 

我已经尝试了多个nginxconfiguration,包括添加

 # wildcard nginx server_name server_name example.com *.example.com; # localhost server_name server_name localhost; 

并且只需要注释掉server_name,就像你在nginx.conf中看到的一样

当我运行“耙路线”时,我得到: 耙路线::终端输出

我认为这可能是dev-env / staging-env问题,在查看其他堆栈问题之后,我已经添加了:

 # development.rb (added) config.action_dispatch.tld_length = 0 # staging.rb (added) config.action_dispatch.tld_length = 2 

我似乎无法弄清楚我做错了什么,因为没有任何东西看起来能够正常工作,而我刚开始做我喜欢称之为“变化圈”的东西。

检查资源:

如何访问子域名

Rails的子域教程

devise特定的子域路由

子域名称空间错误

Rails子域redirect

devise子域路线导轨4

项目规格:

rails版本:5.0.0.1

ruby版本:2.3.0

美洲狮版本:3.6.2

devise版本:4.2.0

使用ActiveRecord

我一直在与RoR工作了大约3个月,并且能够通过大多数问题sorting我的方式。 我深入修复这个子域问题3天,似乎无法确定问题。