随着Bundler的发布,有多大变化?是否有可用作基础的模板?什么是最佳实践?
答案 0 :(得分:37)
我觉得有些帖子很有用:
修改(2012-01-10):有关宝石最佳做法的优秀全能指南是RubyGems Guides。我强烈建议现在就从这里开始。
总结要点:
lib/gem.rb
和lib/gem/
结构代码。bin
,data
中的所有数据文件以及test
或spec
中的测试。require
或依赖于加载路径之外的文件。 (VERSION
文件通常似乎生活在宝石中的奇怪位置。)require 'rubygems'
。$LOAD_PATH
。require File.join(__FILE__, 'foo', 'bar')
,那你就错了。答案 1 :(得分:6)
答案 2 :(得分:4)
当编写胖(二元)宝石时,结构通常是这样的:
lib/1.8/binary.so
lib/1.9/binary.so
lib/my_gem.rb
(此文件只选择加载哪个binary.so
,具体取决于ruby版本)
对于原生扩展:
lib/ext/my_gem/my_sources.*
lib/my_gem.rb
我通常也在这里放一个version.rb
文件:
lib/my_gem/version.rb
它只包含以下内容:
module MyGem
VERSION = "0.1.0"
end
此外,IMO,不要在lib/
目录中放置任何.rb文件除了您希望人们用来加载gem的文件。而是将所有辅助文件放在lib/my_gem/
答案 3 :(得分:4)
Telemachus的建议很好。如果您遵循它,您的宝石将被设置为与捆绑器很好地协作。
您也可以尝试使用珠宝商。它是宝石,为宝石生成骷髅。它吐出的默认框架符合Telemachus提到的所有约定,它还会做一些很好的事情,比如添加你喜欢的测试框架或创建一个GitHub存储库。
答案 4 :(得分:3)
此rubygems guide提供有关gem结构的信息,然后详细说明gemspec
中应包含的内容您可能会发现使用bundler更容易为您创建gem的文件夹结构:
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