在ruby中使用单个代码库的多个应用程序

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

例如,假设:

  • example.com使用auth,页面,博客模块
  • forum.example.com – > auth,论坛模块
  • api.example.com – > auth,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等)


这两个主题是我担心的例子:

  • https://stackoverflow.com/questions/5823125/rails-multi-tenant-resource-loading

  • Rails – 具有自定义框架的多租户应用程序

我想你可能有点过于复杂。 您可以使用Web服务器配置轻松地将不同的子域指向不同的Rails应用程序。 例如,在Nginx中,您只需创建不同的虚拟主机。

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

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

编辑 – 我的答案是专门讨论Rails,而你的问题更通用。