Ruby on rails RubyonRails路由:多名称空间和多域:最佳实践?

Ruby on rails RubyonRails路由:多名称空间和多域:最佳实践?,ruby-on-rails,ruby,ruby-on-rails-4,nginx,namespaces,Ruby On Rails,Ruby,Ruby On Rails 4,Nginx,Namespaces,我有一个RubyonRails实例,它至少支持4个不同的网站,将来还会添加更多。这些网站分为三类: 管理门户(内部网) 公共页面(登录页等) 应用程序的浏览器版本 我已经为这些(admin/、public/和my/)设置了名称空间,这在我的开发环境中非常有效(例如localhost:3000/admin)。但是,在生产中,这些站点中的每一个都将在不同的域/子域上运行 例如: Admin.domain.com上的管理员门户(管理员命名空间) otherdomain.com上的登录页(公共命名

我有一个RubyonRails实例,它至少支持4个不同的网站,将来还会添加更多。这些网站分为三类:

  • 管理门户(内部网)
  • 公共页面(登录页等)
  • 应用程序的浏览器版本
我已经为这些(admin/、public/和my/)设置了名称空间,这在我的开发环境中非常有效(例如localhost:3000/admin)。但是,在生产中,这些站点中的每一个都将在不同的域/子域上运行

例如:

  • Admin.domain.com上的管理员门户(管理员命名空间)
  • otherdomain.com上的登录页(公共命名空间)
  • survey.otherdomain.com(公共名称空间)上的调查问卷
  • my.domain.com上的应用程序(我的命名空间)
我不希望名称空间在URL中显示为URI段,并且在子域中也不需要它。我想将每个域路由到它相应的名称空间

我希望以这种方式拆分名称空间的主要原因是,管理员和应用程序都使用一组非常特定的资源,这是所有其他(公共)网站都不需要的,而且我希望保持开发工作流的独立性,并使这些区域之间的代码解耦

设置这种路由的最佳方法是什么


PS:我在开发中与Webrick一起运行这个,在生产中与nginx/passsenger一起运行。我希望我不需要对nginx做任何激烈的操作来实现这一点。

所有的工作都应该在nginx配置文件中完成

例如,对于admin.domain.com

server {
listen       80; #or 443 if you use ssl
server_name  admin.domain.com;
root /usr/local/app/;

#ssl_certificate      app.cert; 
#ssl_certificate_key  app.key;

location  ~ ^/admin.domain.com(/.*|$) {
passenger_base_uri /;   #change this if you want a base uri
passenger_app_root  /usr/local/app/;
passenger_document_root  /usr/local/app/public;
passenger_enabled on;
}
}

谢谢,我是否还需要在config/routes.rb文件中设置基于域的约束?不,不需要。“乘客基地”是改变的地方。例如:“admin.domain.com/profile”,设置为“passenger\u base\u uri/admin.domain.com”;那么这就等于“localhost:3000/profile”。谢谢,我会尝试一下,如果答案有效,我会接受你的答案+1非常有帮助:)我对这个设置(passenger\u base\u uri)没有任何运气。文档中说:“用于指定给定的URI是一个应该由Passenger提供服务的不同应用程序。”我不想为不同的应用程序提供服务。我有一个rails应用程序,有多个域指向它,对于每个域,我希望在路由中使用不同的名称空间。