在Rails项目中嵌套Ruby gem

4

我如何在当前的Rails项目中创建一个嵌套的gem项目?

我有一个Rails项目,其中有几个部分可以轻松地成为gems。我想将这些部分提取到gems中,但不想离开当前的Rails项目。为gems创建新的源代码控制仓库会增加额外的复杂性,而该项目或组织尚未准备或能够处理这种复杂性。这些复杂性最终将被克服,我想做好准备。

目前我只能想到以下几点。

  1. Relocate code to a single directory root. I'm guessing this would be in the vendor path
  2. Create a <something>.gemspec
  3. Link to the gem in the Gemfile of the Rails app

    gem 'my_lib_code', path: 'vendor/my_lib_code'
    

还需要我做什么?我确定我漏掉了一些重要的事情。


如果这是一个c项目,我会创建另一个共享库,让制作过程生成它。或者,如果这是一个c#项目,我会制作一个.dll文件。对于Java,我会...

我确信Ruby可以像其他语言一样做到相同的事情。这是一种通常完全提取的gem和只是放置在我的lib路径中的代码之间的半途而废。


它被称为 vendor 而不是 vender - Mike Szyndel
我真的不理解你的推理,gems是自包含的、外部的、可重用的代码片段,具有外部API。创建不太像gems的东西有什么意义呢? - Mike Szyndel
在这种情况下,该项目不想将 .gem 文件作为供应商提供,并且也不想要第二个仓库来管理。同时,我希望能够隔离代码以进行测试和确保代码的稳定性。 - Jason
将它们提取到您的lib或models目录中的PORO中。您可以在隔离环境中测试它们,当您想要将它们提取到gem中时,只需从repo中删除它们,并在Gemfile中引用该gem即可。 - jstim
代码已经在POROs和lib目录中了。代码仍然是Rails应用程序的一部分。当我运行测试时,它们也会运行。当到了提取的时候,我仍然需要创建文件。我正在寻找半途而废的步骤。就在你将其提取到自己的项目之前。 - Jason
1个回答

2

这是一种完全合适的基于组件的架构方法。

你只需要一个代码库、一个测试套件和一个部署过程,同时你必须“强制”考虑干净的接口和关注点分离。

当然,如果你计划与其他项目共享此功能,则外部托管的(但不一定是公开的)Gem 更为适合。

在实现方面,你可以从 Stephan Hagemann 在今年 RailsConf 上的演讲中获得一些巧妙的想法:“开始使用基于组件的 Rails 应用程序!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接