代码之家  ›  专栏  ›  技术社区  ›  brad

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

  •  8
  • brad  · 技术社区  · 14 年前

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

    在某些情况下,我们有一些gems共享这些功能,但它超越了ruby,而进入了javascript、css等。。

    所以我的任务是把这两个应用合并成一个代码库。我想最终我们会希望它是一个具有基于权限的角色访问的单一应用程序,但那将在很晚之后出现。

    我的第一个想法是将它们快速组合在一起,创建两个rails引擎,并在它们之间共享公共lib。我认为这是组合代码、查找公共部分和开始共享的最快方法。

    不过,我的第一个问题是如何在应用程序之间路由。一个应用程序使用一个永不更改的域名,另一个应用程序有许多域。有人能建议我如何将一个特定的请求路由到一个特定的应用程序,这样他们就可以在共享libs的公共代码库的同时保持独立开始吗?

    或者,如果有人对如何组合这些应用程序有其他建议,我会全神贯注。

    它们都是运行JRUBY 1.5.3的Rails 2.3.10应用程序,但如果能让事情变得更简单或更干净(即更好的机架集成),我们可以升级到Rails3

    我没有做过任何机架编程,但从来没有伤害到学习,如果这将使我们的生活更容易。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Rafi Jacoby    14 年前

    我建议你使用引擎。

    对于路由,我会在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;
        }
    }
    
        2
  •  2
  •   mpapis    14 年前

    您应该避免在服务器级共享代码,最好的做法是构建包含公共代码库的库,并在开发过程中使用它们。最好的方法可能是使用helpers,因为它是在代码中提供所有功能的模块的最简单方法。

    关于将功能重写到一个应用程序,请选择具有更大的现成代码集的应用程序作为基础。应该可以使用支持url重写的web服务器迁移每个方法的代码。我想在mod_rewrite中使用apache。所以计划是:

    1. 将两个应用程序设置为可通过一个apache访问。
    2. 选择一个两者相似的方法,并在一个应用程序中重写它以支持两个应用程序的需求。
    3. 在apache中添加mod_rewrite规则,以便仅在此操作中将流量重定向到一个应用程序。
    4. 转到第二点,直到所有内容都被重写。
    5. 删除旧应用程序并调整路由/mod_rewrite以使用一个应用程序

    您不必使用apache,应该有其他web服务器支持url重写。

    我想用这个算法把我们的应用程序重写到rails 3.0。