【问题标题】:Multiple applications using a single code base in ruby在 ruby​​ 中使用单个代码库的多个应用程序
【发布时间】:2011-07-10 14:28:59
【问题描述】:

我试图对如何在 ruby​​/rack(或者更理想的是现有框架)之上构建一个管理与 WordPress 等效的应用程序有一个合理的理解。具体来说,能够从同一个代码库为多个站点提供服务,每个站点都有自己的功能和配置。

假设,例如:

  • example.com 使用身份验证、页面、博客模块
  • forum.example.com -> 认证,论坛模块
  • api.example.com -> 身份验证、api 模块

这个测试用例似乎可以工作,包括在生产环境中:

# test.rb
class Foo
end

# config.ru
require 'rack'

use Rack::ShowExceptions
use Rack::CommonLogger

run lambda { |env|
  case env['HTTP_HOST']
  when /^test\./
    require './test'
    # answers true, regardless of subdomain loaded first
    [200, {'Content-Type'=>'text/plain'}, "#{Kernel.const_defined? :Foo}"]
  else
    # answers false, regardless of subdomain loaded first
    [200, {'Content-Type'=>'text/plain'}, "#{Kernel.const_defined? :Foo}"]
  end
}

到目前为止,我大部分时间都在几乎没有任何状态的环境中工作,但是,我有点担心这可能会卷土重来并在路上咬我。

无论如何,我错过了什么/我应该期待它在哪里回来咬我? (由于文件重新加载而导致的性能?如果适当,需要重新初始化数据库连接池?会话在不同域之间被无效共享?等等,除了任何作为静态文件缓存都不合适的明显事实。)

而且,周围有没有可以开箱即用的应用程序?

(我对 Rails 的最初印象是它不适合这样的用例。也许是错误的。我遇到的唯一多站点插件是允许 example.com/site1、example.com/site2 等。 )


这两个线程说明了我担心的问题:

【问题讨论】:

    标签: ruby multi-tenant


    【解决方案1】:

    我认为您可能在某种程度上使情况复杂化了。您可以使用 Web 服务器配置轻松地将不同的子域指向不同的 Rails 应用程序。例如在 Nginx 中,您只需创建不同的虚拟主机。

    如果您希望所有模块都包含在一个应用程序中,那么您可以拥有一个带有通配符子域的虚拟主机,并使用 Rails 应用程序中的路由通过子域路由到应用程序的不同部分。这非常适合Engine 架构。

    关于数据库,在第一个示例中完全没有问题,因为不同的应用程序可以处理自己的数据库连接。对于引擎示例,通常引擎表将位于同一数据库中,但具有命名空间。

    编辑 - 我的回答是专门讨论 Rails,而你的问题更笼统。

    【讨论】:

    • 当我问这个问题时,我正在考虑构建类似于 WordPress 多用户的东西:一个代码库、多个站点、一个数据库、一个主用户表和一组数据库表每个站点(而不是到处携带 site_id)。
    • 啊,典型的多租户设置。你用你的forum.xyz.com、api.xyz.com..(这完全是一个不同的想法)把我扔了。我将编辑我的答案。
    • forum.domain 和 api.domain 部分实际上也是相关的:它们可能是 rails 引擎,但出于所有意图和目的,它们将是 WP 世界中的插件。 :-)
    • 如果不通过子域如何区分不同的租户?
    • 按子域。在这种情况下,WP 允许的是每个子域使用一组不同的插件。这是可能的,因为 PHP 在每个页面视图上都会重新加载。正如我在问这个问题时所理解的那样,Rails 应用程序并非如此,这意味着一旦加载了引擎,例如,它就会为对该应用程序的所有后续请求启用。
    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2016-11-16
    相关资源
    最近更新 更多