Rails 4子域名最佳实践

时间:2014-02-16 12:24:39

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

我正在寻求一些一般性的见解并就此问题提出建议,而不是针对问题的具体解决方案。

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

通常,该面板将与网站公共端的现有模型和控制器交叉,并管理由管理员用户提交的内容。

说到我应该如何设计这个应用程序?

鉴于我的堆栈包含:

  • Nginx的
  • Phusion Passenger
  • Ubuntu的
  • Rails 4

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

相反,如果这是一个单一的应用程序,我需要设置一些时髦的路由,以确保编辑用户之类的东西只能在admin子域下登录管理员。

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

任何见解都会很棒,我很擅长。

3 个答案:

答案 0 :(得分:1)

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

  • 性能更高,因为单个应用程序消耗的内存更少,然后是多个。
  • 代码的可维护性更高。
  • 应用程序的“用户”和“管理员”部分之间的通信更容易。
  • rails应用程序的内置路由机制本身支持这种情况。
  • 轻松配置代理服务器(如nginx)以支持此功能。

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

我有多个使用这种架构构建的应用程序,它工作得很棒! :)

答案 1 :(得分:0)

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

我是在我写的应用程序上做到的,但这与你的结构有点不同。 您是否可以根据铁路指南使用控制器命名空间?如果没有,那么Railscasts在子域名上有一些很好的信息。

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

答案 2 :(得分:0)

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

一个应用程序,包括正常部分以及管理员资料。像这样,您也可以从管理面板访问您的模型(或其他应用程序逻辑),而无需在多个应用程序中找到共享它们的方法。 一开始构建和维护的速度更快。如果应用程序变得太大,您仍然可以在以后将其拆分。

至于如何:

  1. 子域上的路由约束将内容发送到正确的控制器
  2. 所有管理员互动(访问控制!)的独立控制器,理想情况下名称间隔
  3. 根据需要共享模型或其他业务逻辑/对象(控制器中没有业务逻辑!)
  4. 不需要更改堆栈中的任何其他内容(rails中的所有逻辑)
  5. 在共享两者之间的模型(或其他业务逻辑对象)时要非常小心。这不仅会使结构变得“固定”,而且在您决定稍后拆分时也会导致问题。