【发布时间】: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
我应该使用新的 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
通常,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 new 在test/ 中创建了一个虚拟应用程序。如果您的 gem 非常独立,没有明确的 Rails 集成,则不需要虚拟应用程序。您可以完全手动创建此文件夹,尤其是 .gemspec 文件,但这两个工具将为您提供以下内容:
Bundler 为您服务:
Gemfile,并自动将您在<gemname>.gemspec 中指定的依赖项包含在包中(这是一个Gemfile 命令,gemspec)<gemname>.gemspec,将其设置为从lib/<gemname>/version.rb 中提取您的gem 版本
Rails 的 plugin new 执行 Gemfile 和 .gemspec,就像 Bundler 一样。另外:
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,以便可以更正。
【讨论】:
rails plugin new 创建一个空的 gem,它会立即挂接到 rails。所以它确实创建了一个“框架”供您填写。
您仍然需要bundler 或jeweler 才能将这组文件实际转换为gem 并发布。
您会从两者中选择哪一个有点个人喜好问题。最近我发现很多人实际上都在提倡使用bundler。但是对于bundler,它仍然主要是一个手动过程。
我个人认为使用jeweler 还是很有趣的。使用珠宝商有什么好处:
Gemfile,珠宝商将生成与之对应的gemspec。请注意,这与 bundler Famous 的 Yehuda 建议相反:他建议手动填写 gemspec,然后通过在文件中指定 gemspec 让 Gemfile 使用它。简而言之,我仍然建议在使用rails plugin new 之后使用jeweler。
希望这会有所帮助。
【讨论】:
由于 gem 更易于安装和管理,最好使用 jeweler 创建您的 gem。寻找灵感的最佳方式是打开任何与 Rails 集成的 gem 的来源,看看他们是如何做到的。通常这是通过 Railties 设施完成的。
【讨论】: