构建红宝石宝石的现代方法是什么?

grk*_*grk 37 ruby rubygems

随着Bundler的发布,变化有多大?是否有可用作基础的模板?什么是最佳做法?

Tel*_*hus 39

我觉得有些帖子很有用:

编辑(2012-01-10):宝石最佳实践的优秀全能指南是RubyGems指南.我强烈建议从现在开始.

总结关键点:

  • 使用代码的基本lib/gem.rblib/gem/结构.
  • 将任何可执行文件bin,任何数据文件放入data或测试testspec.
  • 不要require或依赖于加载路径之外的文件.(VERSION文件通常似乎生活在宝石的奇怪地方.)
  • 不要require 'rubygems'.
  • 不要乱动$LOAD_PATH.
  • 如果你发现自己写作require File.join(__FILE__, 'foo', 'bar'),那你做错了.


jmo*_*ira 7

使用bundler的最简单方法是:

bundle gem <gem_name>
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么这会被贬低?我认为这是最好的方法,并创建一个良好的默认结构. (2认同)

小智 6

ruby​​gems 指南提供了有关 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


hor*_*guy 5

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

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
Run Code Online (Sandbox Code Playgroud)

另外,IMO,除了您希望人们用来加载 gem 的文件之外,不要在lib/目录中放置任何 .rb 文件。而是将所有辅助文件放入lib/my_gem/