【问题标题】:How to create a new Ruby gem?如何创建一个新的 Ruby gem?
【发布时间】:2011-05-20 09:27:19
【问题描述】:

要创建一个新的 Ruby gem,我应该使用Jeweler 还是应该使用Bundler 的内置 gem 骨架来创建基础 gem?有什么重要的区别?

【问题讨论】:

标签: ruby rubygems bundler


【解决方案1】:

我会和珠宝商一起去。 Bundler 骨架只会为您提供基础知识。 Jeweler 有更多选项可供使用,还有许多有用的 rake 任务,用于版本控制、推送到 github、创建 gemspec、构建和安装。

如果您使用的是 Rails 3 引擎,我有一个 Jeweler fork(绝对是一个正在进行中的工作),它将生成应用程序骨架并包含引擎文件。您只需使用--rails3-engine 作为选项运行jeweler 命令。如果您有兴趣,这里是叉子:
https://github.com/johnmcaliley/jeweler

【讨论】:

  • Jeweler 不再像 Bundler 那样保持最新状态,因为作者承认现在大多数人都使用 Bundler:github.com/technicalpickles/jeweler/issues/232
  • 我同意。我不再使用珠宝商。第一次从头开始可能会更好,这样您就可以了解 gemspec 的工作原理。
【解决方案2】:

创建 Gem 并不难,我建议您尝试从头开始构建 Gem,无需任何工具。在您了解所涉及的内容(创建 gemspec、构建并将其推送到 ruby​​gems.org)之后,您可以使用工具来加快该过程。我猜你不会,因为制作宝石根本不是问题。

【讨论】:

  • 好点。在使用生成器之前,最好了解如何从头开始。如果您决定使用 Jeweler,这将使调试出现的任何问题变得更加容易。我确实认为 Jeweler 让创建 gem 变得更加容易,它迫使你做一些事情,比如创建描述、版本控制等。为什么你要从头开始创建它(在你学习它一次之后),当你可以使用珠宝商并加快流程吗?在我看来是浪费时间,而且不容易出错。
  • 对不起,我迟到了:珠宝商创造的东西并不容易,它只是将东西移动到 Rakefile。一个 gemspec 只有大约 10 行。我喜欢捆绑器生成的东西。明智且极简。
  • 学习从头开始编写 gem 而不是使用生成器就像从头开始编写 Web 框架而不使用 rails new。我明白你关于从头开始创建一个的观点,但对于刚开始创建 gem(或任何相关的东西)的人来说,有时通过示例学习更容易。当您看到生成器构建的内容时,您可以了解每个部分的作用以及为什么它对结构很重要。一旦你了解了它的工作原理,你就可以从头开始编写一个。
  • 在这种情况下,我会选择bundler gem提供的生成器。
【解决方案3】:

Use Bundler

从命令行:

bundle gem your_new_gem

这将创建一个名为your_new_gem 的目录,其中只有一组基本的文件和目录结构,这些文件和目录结构现在被认为是最佳实践。它快速、简单,是一个很好的起点。

【讨论】:

    【解决方案4】:

    这是一个值得一看的替代方案:ore

    Bundler 为您提供了一个用于 ruby​​ gems 的模板,而 ore 有多个内置模板,并且可以创建自己的模板。它还支持 Git、SVN (urgh) 和 Mercurial。

    【讨论】:

      【解决方案5】:

      我建议使用内置的捆绑器命令。

      bundle gem your_gem_name

      创建 gem 时应遵循一些规则。例如命名约定和版本控制规则。 我最近在 netguru 的博客上写了一篇关于创建 gems 的文章。我想你会在那里找到你需要的东西。

      https://netguru.co/blog/posts/creating-a-gem-a-step-by-step-tutorial

      希望这会有所帮助。

      【讨论】:

      【解决方案6】:

      您也可以在 RubyMine 中构建 gem。文件 > 新项目 > 新宝石。就这么容易。但我想对这种方法做一些说明:

      对于调试,RubyMine 将使用快速调试器 gem,ruby-debug-ide。我知道现在大多数人都在使用带有 Byebug 的 Pry,但 ruby​​-debug-ide 是一个将 ruby​​-debug 粘合到 Eclipse (RDT)、NetBeans 和 RubyMine 等 IDE 的接口。

      在 Run > Edit Configurations > + > Ruby 下,我添加了一个新的调试配置,根据这里的文档:https://www.jetbrains.com/help/ruby/run-debug-configuration-gem-command.html#1

      在“配置”下的“Ruby Script”下,我将路径添加到 lib 下的 ruby​​ gem 文件:lib/my_gem.rb 在“配置”下的“Ruby SDK”下,我指定了我正在使用的 RVM gemset。 在捆绑器部分下,我选中“在捆绑器的上下文中运行脚本”。这将使用 bundle exec,它将读取项目根目录中 Gemfile 中的依赖项。现在对于 gems,Gemfile 包含一个名为“gemspec”的方法,它依次读取 my_gem.gemspec 中的依赖项中的依赖项。在那里,我将依赖项传递给 Gem::Specification.new 块:

        spec.add_development_dependency "bundler", "~> 1.7"
        spec.add_development_dependency "rake", "~> 10.0"
      

      【讨论】:

        猜你喜欢
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-14
        • 2014-07-03
        • 2011-10-31
        相关资源
        最近更新 更多