在两个rails应用程序之间共享可视资产和一些控制器?

时间:2011-08-26 02:43:19

标签: ruby-on-rails deployment

我有两个rails应用程序,我正在考虑合并为一个,因为它们共享一个类似的布局。现在,在一个应用程序中有一个脚本将资源从另一个应用程序(包括基本控制器)拉入第二个应用程序。我有几种方法可以考虑这样做:

  1. 将应用程序与命名空间合并,并在部署时创建一个脚本,该脚本创建两个单独的RPM包(这是用于在CentOS / RHEL上部署),并在其中包含相应的文件
  2. 运行一个应用作为另一个应用的引擎。将所有共享控制器和可视资产放入顶级应用程序。部署时,如果我不需要,则撕掉引擎。 (即,如果它只是第一个应用程序,我不想给第二个应用程序的代码)
  3. 使用通用控制器和CSS / JS创建一个GEM,并找到将其注入每个正在运行的应用程序的方法。
  4. 有什么想法/想法吗?我正在考虑使用数字1,因为它可能是最容易开发的(我认为2会更容易部署)

4 个答案:

答案 0 :(得分:3)

Brighter Planet我们做(3)。我们的shared layout gem支持Rails 2和Rails 3。

特别要看看:

答案 1 :(得分:2)

如何4:制作三个引擎(或宝石,或封装在宝石中的引擎):一个用于常见的东西,一个用于每个应用程序的独特内容?

答案 2 :(得分:1)

您是否考虑使用通用控制器,css和js创建引擎,然后将引擎打包为gem。当您在本地工作时,您可以让两个应用程序使用bundler指向gem的共享开发副本。要部署,请使用每个应用程序打包gem,然后部署整个内容。作为一个宝石有很多好处,比如将来拥有不同版本的宝石的能力,所以你不必同时更新这两个应用程序。

这似乎是一个相当不错的引擎指南:http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/

我对此非常谨慎,并且可能会采用上述方法,但您可以考虑使用符号链接将文件永久地拖放到一个或另一个项目中。我认为这是一个坏主意,但在某些狭隘的情况下,这可能是有道理的。这实际上取决于你的具体情况,因为它是一种讨厌的黑客,但讨厌的黑客有时可以雄辩地解决具体问题。

答案 3 :(得分:0)

最重要的是,我建议合并应用。在部署时修改程序包以分离两个应用程序的方案容易出错,并且与当前的质量控制程序相反 - 您希望开发的代码尽可能地与部署的应用程序匹配。

鉴于此,您希望了解不同的模块化方法。实际上有很多共享代码的选项:

  • 宝石
  • 插件
  • git子模块或同等文件中包含的库代码
  • rails engine
  • 单独部署的应用

作为gem打包的共享引擎可能是最好的方法,但它需要你使用正确版本的Rails才能获得全部好处。即使没有引擎,你也可以让它工作......它只需要更多的设置。

通过“单独部署的应用程序”,我指的是具有共享功能的第三个应用程序。这可能是所需的资源(CSS,JS),甚至可以是页面的一部分(动态加载)。这可能是一个时髦的解决方案,但我已经看到它在正确的情况下工作。

这些解决方案中的任何一个都需要在开发人员身上付出更多的努力......但最终你可以通过代码库来获得更好的部署麻烦