【问题标题】:Rails 4 Subdomain Best PracticesRails 4 子域最佳实践
【发布时间】:2026-02-01 14:10:02
【问题描述】:

我正在寻求对此问题的一般见解和建议,而不是针对问题的具体解决方案。

我目前正在开发一个需要管理子域的应用程序,例如:admin.mydomain.com,这个管理子域将处理所有事情,例如管理用户和在面板本身内设置内容以及对 Dropbox 的 API 调用和什么不是。

一般来说,该面板将在某种程度上与网站公共方面的现有模型和控制器交叉,并管理由管理员用户提交的自己的内容。

话虽如此,我应该如何设计这个应用程序?

鉴于我的堆栈包括:

  • Nginx
  • Phusion 乘客
  • Ubuntu
  • 导轨 4

我不知道 2 个较小的应用程序是否可行,因为我不知道在同一台服务器上托管 2 个应用程序的最佳方式。然后是两个不同进程的更大内存需求,以及两个应用程序之间的路由问题。

相反,如果这是单个应用程序,我需要设置一些时髦的路由,以确保编辑用户等操作仅在 admin 子域下可供登录管理员使用。

通过在线阅读的所有内容,它让我对如何“物理”设置一些东西有了一个合理的理解(尽管我仍然不确定该领域)但我仍然不确定如何构建这个,2 个应用程序或1、子域的最佳路由等等。

任何见解都会很棒,我完全处于困境中。

【问题讨论】:

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


    【解决方案1】:

    如果我是你,我会选择单一应用程序,因为它有很多优点:

    • 性能更高,因为单个应用程序消耗的内存更少,然后是多个应用程序。
    • 代码的可维护性更高。
    • 应用程序的“用户”和“管理员”部分之间的通信更轻松。
    • rails 应用程序的内置路由机制原生支持此类场景。
    • 代理服务器(如 nginx)的简单配置即可支持此功能。

    如果您遵循我的想法,我会在路由中使用命名空间来分隔“用户”和“管理员”部分。并使用device gem 在管理部分添加身份验证。

    我有多个使用这种架构构建的应用程序,而且效果很棒! :)

    【讨论】:

      【解决方案2】:

      如果您决定使用两个应用程序,那么您可以在配置文件中明确设置 admin.domain 并将其指向一个应用程序,然后设置 www.一个指向另一个域。

      我在我编写的应用程序上这样做了,但这与您的结构有点不同。 您不能按照铁路指南使用控制器命名空间吗?如果没有,那么 Railscasts 有一些关于子域的好信息。

      http://railscasts.com/episodes/221-subdomains-in-rails-3 http://railscasts.com/episodes/123-subdomains-revised

      【讨论】:

        【解决方案3】:

        除非有理由不这样做,否则请使用最简单的解决方案:

        一个应用程序,包括普通部分和管理部分。像这样,您也可以从管理面板访问您的模型(或其他应用程序逻辑),而无需找到在多个应用程序之间共享它们的方法。 一开始就进行构建和维护会更快。如果应用程序变得太大,您仍然可以在以后拆分它。

        至于方法:

        1. 子域的路由约束将内容发送到正确的控制器
        2. 所有管理员交互的独立控制器(访问控制!),理想的命名空间
        3. 根据需要共享模型或其他业务逻辑/对象(控制器中没有业务逻辑!)
        4. 不需要更改堆栈中的其他任何内容(rails 中的所有逻辑)

        在两者之间共享模型(或其他业务逻辑对象)以外的任何内容时要非常小心。这不仅会使结构变得不那么“SOLID”,而且还会在您以后决定拆分它时给您带来麻烦。

        【讨论】: