【问题标题】:Suggestions for Ruby Gem authoring (ie. setup, environment etc)Ruby Gem 创作建议(即设置、环境等)
【发布时间】:2010-06-19 15:31:53
【问题描述】:

我已经开发 Rails 应用程序大约一年了,并且正在开始一个新项目(实际上是 3 个项目)。我想编写一些可以在这些项目之间共享的 gem,以维护一个通用的代码库。它们可能最终会在某个时候演变成 Rails 引擎,但首先,它们只是可以包含在每个应用程序中的通用库。

我以前从未创作过 ruby​​gem,所以我正在寻找关于我应该从哪里/如何开始构建这个 gem 的提示和技巧:

  • 是否最容易开始将其嵌套在 Rails 应用程序中进行编程,例如,作为 git 子模块以利用现有的 Rails 环境等...?
  • 我应该开始将它作为一个独立的库进行编程吗? (我的非 Rails 经验相当初级,所以我不确定结构/设置/测试)

我想尽可能地坚持简单的 Rails 约定和适当的测试环境等...可能还不是 Rails3 的采用者,但显然会朝那个方向前进。

非常感谢任何提示、技巧、建议或推荐资源!

【问题讨论】:

标签: ruby-on-rails ruby rubygems


【解决方案1】:

你是把它做成一个独立的还是在事后把它拆开可能取决于你对你的 gem 和其余代码之间的边界的了解程度。如果职责非常明确,我会分开开始。如果不清楚事情的开始/结束的确切位置,您可能希望在正确地阻止自己多次做一堆忙碌的工作之前让它工作。

无论您设法将代码的可重用部分提取出来,一旦您准备好代码(或之前,如果这是您滚动的方式),您可能想看看珠宝商http://github.com/technicalpickles/jeweler,特别是如果您将与社区分享宝石。

还有一本书:Practical Ruby Gems,它有点过时了,但你可以以不到 1 美元的价格找到一本二手书。

【讨论】:

  • 感谢您指出 Jeweler,看起来是让我开始使用基础结构的好工具。此外,我不会分享此代码,因为它仅与我们的内部应用程序相关,但将使用 Github 托管,因此我认为它仍然可以完美运行!
【解决方案2】:

我通常做的是首先在我需要的地方内联编写功能 - 比如模型级别等。当我注意到它可以重用时,它会将其提取到 lib/ext/modulename 下的单独模块中。当明确这一功能可以用作单独的 gem 时,我只需创建一个新项目,将代码移植到适当的结构中,处理任何可能的初始化,添加文档并提交到 github。

稍后当您需要对 gem 进行修改时,我只是在单独的项目中完成我的工作,构建 gem,然后使用 gem install --local project.gem 安装它。您也可以从 git 将其作为插件安装,直接在供应商目录中进行编辑,然后将更改反向移植到 gem 项目中。

【讨论】:

    【解决方案3】:

    Jeweller 很棒,但有几个值得一提的选择:

    • bundle gem yourgemname 创建一个简单的结构,您可以在其中自行管理 gemspec 文件(请参阅 Railscasts episode 245)
    • enginex yourgemname 在 test/spec 中创建一个准系统虚拟 rails3 应用程序(如果这是您首选的测试框架,则通过 -t rspec)。在github 上找到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 2019-10-01
      • 2010-10-29
      • 2017-03-20
      相关资源
      最近更新 更多