【问题标题】:Ruby on Rails routes: Multiple namespaces and multiple domains: best practice?Ruby on Rails 路由:多个命名空间和多个域:最佳实践?
【发布时间】:2016-04-25 17:35:18
【问题描述】:

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

  • 管理门户(内网)
  • 公共页面(登陆页面等)
  • 应用的浏览器版本

我已经为这些(admin/、public/ 和 my/)设置了命名空间,这在我的开发环境中非常有效(例如,localhost:3000/admin)。然而,在生产中,这些站点中的每一个都将在不同的域/子域上运行。

例如:

  • admin.domain.com 上的管理门户(管理命名空间)
  • otherdomain.com 上的登录页面(公共命名空间)
  • survey.otherdomain.com(公共命名空间)上的问卷调查
  • my.domain.com 上的应用(我的命名空间)

希望命名空间在 URL 中显示为 URI 段,并且在子域中也不应该是必需的。我想将每个域路由到其适当的命名空间。

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

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

PS:我在开发中使用 Webrick,在生产中使用 nginx/passsenger。我希望我不需要对 nginx 做任何激烈的事情来让它工作。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 nginx namespaces


    【解决方案1】:

    你所有的工作都应该在 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 文件中设置基于域的约束吗?
    • 不,你没有。 “passenger_base_uri”是改变的地方。例如:“ admin.domain.com/profile ”,设置“passenger_base_uri /admin.domain.com;”那么这等于“localhost:3000/profile”。
    • 谢谢,如果可行,我会试一试并接受您的回答。 +1 非常有帮助:)
    • 我对这个设置没有任何运气(passenger_base_uri)。文档指出:“用于指定给定的 URI 是应由乘客服务的不同应用程序。”我不想提供不同的应用程序。我有一个单一的 Rails 应用程序,有多个域指向它,对于每个域,我想在我的路由中使用不同的命名空间。
    猜你喜欢
    • 1970-01-01
    • 2013-10-09
    • 2012-11-02
    • 2013-04-16
    • 1970-01-01
    • 2011-09-29
    • 2017-11-30
    • 1970-01-01
    • 2018-12-02
    相关资源
    最近更新 更多