【问题标题】:Which method should I use to create my first open source Ruby Gem with Rails 3.1? [closed]我应该使用哪种方法来使用 Rails 3.1 创建我的第一个开源 Ruby Gem? [关闭]
【发布时间】:2011-09-27 19:33:00
【问题描述】:

我应该使用新的 Rails 3.1 rails plugin new 命令、jeweler 还是 bundler 来创建我的第一个 Ruby on Rails Gem?您会推荐哪些教程来帮助我开始为 Ruby on Rails 编写开源 Gem?

【问题讨论】:

    标签: ruby-on-rails open-source rubygems ruby-on-rails-3.1 ruby-on-rails-plugins


    【解决方案1】:

    通常,Ruby gem 非常简单,Rails 插件只是在某种程度上接触 Rails API 的 gem。 (正如另一个答案指出的那样,Railties 是挂钩 Rails 的好方法)。要编写一个 gem,指定一个文件夹,并在其中包含:

    • <gemname>.gemspec:这列出了 gem 的名称、版本、作者、网站、gem 依赖项列表和要包含在 gem 中的文件列表。 (Rails 的 plugin new 和 Bundler gem 都会为您生成好的 .gemspecs,见下文)
    • lib/<gemname>.rb:这是你的 gem 的主要代码。通常这包含一个以你的 gem 命名的类或模块。 (Rails 的plugin new 与模块一起使用)。

    其他一切都是可选的,但好的做法包括:

    • test/spec/:这是您的测试所在。因为 Rails 插件通常在应用程序中使用,Rails 的plugin newtest/ 中创建了一个虚拟应用程序。如果您的 gem 非常独立,没有明确的 Rails 集成,则不需要虚拟应用程序。
    • 自述文件,用于描述 gem 的功能以及如何使用它。

    您可以完全手动创建此文件夹,尤其是 .gemspec 文件,但这两个工具将为您提供以下内容:

    Bundler 为您服务:

    • 为您创建一个Gemfile,并自动将您在<gemname>.gemspec 中指定的依赖项包含在包中(这是一个Gemfile 命令,gemspec
    • 为您创建一个示例<gemname>.gemspec,将其设置为从lib/<gemname>/version.rb 中提取您的gem 版本
    • 设置使用Git生成gem文件列表(方便,但是gem-building机器需要安装Git)。通常我会使用 Rake 来执行此操作,但它更烦人。

    Rails 的 plugin new 执行 Gemfile.gemspec,就像 Bundler 一样。另外:

    • Rails 使用 Ruby 生成 gemfile 列表。不错。
    • 它为您建立了一个最小的目录结构,大部分是空的。
    • 它设置了一个示例测试,以及一个完整的虚拟应用程序(!)供测试运行。我刚看到这个,我觉得它是天才。

    Rails 还会为您创建一个 Rakefile,用于添加 rake 任务,并且这两个工具都会为 Git 预先配置一个 .gitignore 以忽略一些常见产品。

    要在实际应用中测试您的 gem,请执行gem build <gemname>.gemspec,并将gem <gemname> 添加到您应用的Gemfile。这将创建一个 -.gem 文件,其中包含整个 gem。你可以gem install <gemname>-<version>.gem,Bundler 会接的。

    当您准备好发布时,gem push <gemname>-<version>.gem 会将其推送到 RubyGems.org。有关获取帐户和推送宝石的详细信息,请参阅http://rubygems.org

    此外,在开发过程中,您需要对 gem 进行更改,而不必继续构建(和安装)版本。单元测试会解决其中的一些问题,但是如果您想直接从源代码中使用您的 gem,Bundler 有一个很棒的工具:

    gem <gemname>, :path => "<path/to/your/gems/folder>"

    文件夹是包含.gemspec 文件的文件夹。

    有人知道使用珠宝商的任何理由吗?我很想知道它比这些家伙做得更多。一般来说,手写gemspecs 对我来说很容易,只要你有一个模板可以复制、粘贴和修改。此外,如果我在每个工具提供给您的内容中有任何错误或遗漏,我已将答案制作为 wiki,以便可以更正。

    【讨论】:

      【解决方案2】:

      rails plugin new 创建一个空的 gem,它会立即挂接到 rails。所以它确实创建了一个“框架”供您填写。

      您仍然需要bundlerjeweler 才能将这组文件实际转换为gem 并发布。

      您会从两者中选择哪一个有点个人喜好问题。最近我发现很多人实际上都在提倡使用bundler。但是对于bundler,它仍然主要是一个手动过程。

      我个人认为使用jeweler 还是很有趣的。使用珠宝商有什么好处:

      • 在任何轨道或​​其他项目中使用Gemfile,珠宝商将生成与之对应的gemspec。请注意,这与 bundler Famous 的 Yehuda 建议相反:他建议手动填写 gemspec,然后通过在文件中指定 gemspecGemfile 使用它。
      • 添加一组 rake 任务,让您更轻松地发布和构建您的 gem
      • 允许简单的版本管理
      • 与git很好的集成,会自动标记、推送、提交。

      简而言之,我仍然建议在使用rails plugin new 之后使用jeweler

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        由于 gem 更易于安装和管理,最好使用 jeweler 创建您的 gem。寻找灵感的最佳方式是打开任何与 Rails 集成的 gem 的来源,看看他们是如何做到的。通常这是通过 Railties 设施完成的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-05
          • 2014-12-21
          • 1970-01-01
          • 1970-01-01
          • 2013-03-13
          • 1970-01-01
          相关资源
          最近更新 更多