【问题标题】:Single rails code, multiple applications addressed by domain name单轨代码,通过域名寻址的多个应用程序
【发布时间】:2012-11-25 08:03:08
【问题描述】:

我有一个 Rails 应用程序,我想为不同的站点提供服务,这些站点通过域名进行区分。虽然代码相同,但配置不同。可能所有应用程序的数据都将放在一个具有不同表前缀的数据库中。我正在使用 rails3 并且可以定义表前缀(虽然我没有检查 rails2,可能也有)。

我试图找到关于这个主题的类似问题,虽然我找到了......一些否定的答案,告诉 rails 不是为此而设计的,但是在 rails 3 主要版本之后,也许有可能......因为它变得更加模块化,更干净,我非常感激。

我目前解决所描述问题的想法如下:

  1. 当请求到达时,中间件会捕获域名
  2. 根据域名识别前缀,但自然只针对实际请求
  3. activerecord 的 table_prefix 读取器将被更改,而不是返回为实际域定义的前缀
  4. .. 可能会有一些其他配置需要反映在实际域中

我想问是否值得尝试。我应该认识到哪些可能的陷阱?或者我在这里试图解决的问题已经有了宝石?你会如何尝试解决这个问题?

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails-3


    【解决方案1】:

    您真正需要了解的是 Rails 如何通过 Rack 管理 call
    Rack 允许您将有效的 Web 请求连接到几乎任何 Rack-compliant 端点,就像另一个 Rails 3 应用程序一样。您将数据作为:xml:json 传递给其他应用程序。

    我不确定如何在不使用两个应用程序中的中间模型复制数据结构的情况下做到这一点。缺点是您创建和传输相同数据的多个副本,因此如果您要处理大量信息,速度会非常慢。

    【讨论】:

      【解决方案2】:

      你为什么要打扰?只需为不同的配置创建单独的数据库并运行单独的独角兽实例,就可以省去您的痛苦和麻烦。

      【讨论】:

      • 我希望能够使用脚本创建新应用程序。我每次都觉得代码重复,创建新数据库也不方便。当然,每次引入新应用程序时,都需要迁移所有前缀表并在某处注册域的前缀,但我想省略重复代码。
      • 但也许我应该看看独角兽.. 我想我不明白你的意思。谢谢你给我指路。
      • 与保留域和表空间前缀寄存器相比,您可以使用更少的“重复”来完成这一切;只需为每个站点使用不同的 Rails 环境并在相同的已部署代码库中运行它(要求您不要做愚蠢的事情,例如将用户生成的资产存储在 public 中 - 但是,您必须这样做这也适用于您的表前缀解决方案)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 2018-05-08
      • 2010-09-24
      • 2012-02-07
      • 2022-11-05
      • 1970-01-01
      相关资源
      最近更新 更多