什么是构造ruby的现代方式?

Bundler的发布有很大的改变吗? 有没有可以作为基地的模板? 什么是最佳实践?

一些我发现有用的post:

编辑 (2012-01-10):gem最佳实践的优秀全面指南是RubyGems指南 。 我强烈build议现在从这里开始。

总结要点:

  • 使用基本的lib/gem.rblib/gem/ structure来获取代码。
  • 将任何可执行文件放在bin ,将任何数据文件放入data并在testspec中进行test
  • require或取决于加载path之外的文件。 ( VERSION文件往往似乎生活在gem奇怪的地方。)
  • require 'rubygems'
  • 不要篡改$LOAD_PATH
  • 如果你发现自己写文件require File.join(__FILE__, 'foo', 'bar') ,那么你做错了。

最简单的方法就是使用bundler

 bundle gem <gem_name> 

您甚至可以在父目录的现有项目中使用它。

在编写胖(二进制)gem时,结构通常是这样的:

lib/1.8/binary.so

lib/1.9/binary.so

lib/my_gem.rb (这个文件只是根据ruby版本select加载哪个binary.so

对于本机扩展:

lib/ext/my_gem/my_sources.*

lib/my_gem.rb

我通常也在这里放一个version.rb文件:

lib/my_gem/version.rb

它只是包含像这样的东西:

 module MyGem VERSION = "0.1.0" end 

此外,国际海事组织,不要把任何.rb文件, 除了你希望人们用来加载gem, lib/目录中的文件。 而是把所有的辅助文件放在lib/my_gem/

Telemachus的build议是好的。 如果你遵循它,你的gem将被设置为与打包机很好地玩。

你也可以尝试使用珠宝商。 这是一个生成gem骷髅的gem。 它吐出的默认框架符合Telemachus提到的所有约定,它也会做一些很好的事情,比如添加你最喜欢的testing框架或者创build一个GitHub仓库。

这个rubygems指南提供了关于gem结构的信息,然后详细说明了gemspec应该包含哪些内容

您可能会发现使用捆绑器为您创buildgem的文件夹结构更容易:

bundle gem <gem_name>

my_gem$ bundle gem my_gem create my_gem/Gemfile create my_gem/Rakefile create my_gem/LICENSE.txt create my_gem/README.md create my_gem/.gitignore create my_gem/my_gem.gemspec create my_gem/lib/my_gem.rb create my_gem/lib/my_gem/version.rb Initializing git repo in /Users/keith/projects/my_gem/my_gem