加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:49:52 所属栏目:百科 来源:网络整理
导读:我试图理解如何在ruby / rack(或者更理想的是,现有框架)之上构建一个应用程序来管理与WordPress等效的东西.具体而言,能够从相同的代码库服务多个站点,每个站点都有自己的功能和配置. 例如,假设: example.com使用auth,pages,blog模块 forum.example.com – a
我试图理解如何在ruby / rack(或者更理想的是,现有框架)之上构建一个应用程序来管理与WordPress等效的东西.具体而言,能够从相同的代码库服务多个站点,每个站点都有自己的功能和配置.

例如,假设:

> example.com使用auth,pages,blog模块
> 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,"#{Kernel.const_defined? :Foo}"]
  end
}

然而,到目前为止,我们大部分都在几乎没有任何状态的环境中工作过,我有点紧张,这可能会回来并咬住我的道路.

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

并且,是否有任何应用程序允许开箱即用?

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

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

> https://stackoverflow.com/questions/5823125/rails-multi-tenant-resource-loading
> Rails – Multi tenant application with customization framework

解决方法

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读