将2个rails应用程序组合到一个代码库中

时间:2010-11-18 22:23:39

标签: ruby-on-rails migration jruby rack

我们公司开始使用单一产品,一些由一些Java服务支持的rails应用程序,然后决定他们想要另一种产品最初与第一种产品有很大不同,但随着时间的推移,我们已经意识到他们已经开始收敛,并将代码更改为一个需要对另一个进行类似的代码更改以进行新的功能/错误修复。这显然是一种痛苦。

在某些情况下,我们拥有分享一些此功能的宝石,但它超越了ruby到javascript,css等。

所以我的任务是将这两个应用程序合并到一个代码库中。我认为最终我们希望它是一个具有基于权限的角色访问权限的单个应用程序,但这将会更晚。

我第一次想到将它们快速组合在一起就是创建两个rails引擎并在它们之间共享公共库。我认为这是组合代码,查找常见部分并开始共享的最快捷方式。

我的第一个问题是如何在应用之间进行路由。一个应用程序使用永远不会更改的单个域名,另一个应用程序具有许多域。有人可以建议我如何将特定请求路由到特定应用程序,以便在共享库的公共代码库时可以保持独立开始吗?

或者,如果有人就组合这些应用程序的方式提出其他建议,我会全力以赴。

他们都是运行JRUBY 1.5.3的Rails 2.3.10应用程序,但我们可能会升级到Rails3,如果这会使事情变得更容易或更清洁(即更好的Rack集成)

我没有做过任何Rack编程,但从来没有伤害过如何能让我们的生活变得更轻松。

2 个答案:

答案 0 :(得分:2)

您应该避免在服务器级别共享代码,最好的做法是构建包括公共代码库的库,并在开发期间使用它们。可能最好的拍摄是使用帮助器,因为它是提供在代码中提供功能的模块的最简单方法。

关于将功能重写为一个应用程序,请选择具有较大就绪代码集的应用程序作为基础。应该可以使用支持URL重写的Web服务器来迁移每个方法的代码。我想过用mod_rewrite来使用apache。所以计划是:

  1. 将两个应用程序设置为可通过一个apache访问。
  2. 选择一种类似的方法,并在一个应用程序中重写它以支持两种应用程序要求。
  3. 在apache中添加mod_rewrite规则,仅在此操作上将流量重定向到一个应用程序。
  4. 转到第二点,直到所有内容都被重写。
  5. 删除旧应用程序并调整routing / mod_rewrite以使用一个应用程序
  6. 您不必使用apache,应该有其他支持URL重写的Web服务器。

    我正在考虑使用此算法将我们的应用程序重写为rails 3.0。

答案 1 :(得分:1)

我建议使用引擎的想法。

对于路由,我会在Rails之外处理它。

例如,您将在nginx中执行以下操作:

server {
    # Match only one host.                                                      
    listen 80 default;
    server_name YOUR_SINGLE_APP_DOMAIN;

    location / {
        upstream YOUR_SINGLE_APP_RAILS;
    }
}


server {
    # Fall thru and match any other host.                                                      
    listen 80 default;
    server_name ~^.*$;

    location / {
        upstream YOUR_MULTI_DOMAIN_APP_RAILS;
    }
}