Ruby项目在什么时候成为宝石?

时间:2012-06-19 18:09:51

标签: ruby rubygems

如果我创建一个满足RubyGem所需结构的Ruby项目,包括一个有效的gem spec文件,并将其托管在Git存储库中,但尚未将其构建到myproject.gem文件中,严格来说,它是一颗宝石吗?

毕竟,gem install无法安装它,即使使用--source选项也是如此。

NB。我意识到Bundler能够安装这样的项目。

2 个答案:

答案 0 :(得分:4)

根据RubyGems Guides,宝石包含:

  • <强>代码

    如果没有Ruby代码,你就无法拥有一个Ruby项目。

  • <强>文档

    从项目的README文件和源代码注释中自动生成。

  • 宝石规格

    项目元数据。

根据这个定义,可以看出Ruby项目和gem之间的唯一区别是规范。

实际上,整个打包过程以规范

开始
  1. 您向gem build .gemspec个文件提供
  2. 它评估文件,该文件是有效的Ruby代码,并获得Gem::Specification对象
  3. 它将规范中列出的文件添加到存档
  4. 它将已编译的规范添加到第二个存档
  5. 它会创建您的.gem文件,该文件只是这两个档案的容器
  6. 当您打开.gem包时,您会找到什么?

    Open gem package

    您的项目文件和元数据。是的,基本上就是这样:一个包含大量项目元数据的美化tarball。

    就其本身而言,它与压缩整个项目树并将其下载,或使用当前版本标记最新提交并告诉人们从GitHub获取存档完全没有什么不同。

    常规软件源包和gem之间的唯一区别 RubyGems软件能够使用包中包含的信息来提供自动包管理,依赖解析,从远程存储库安装等等。关于其他包格式也是如此,例如Red Hat的rpm和Debian的deb

    虽然gem在技术上是软件包本身,但名词也用非正式来引用可以打包为gem的整个项目 - 具有的项目宝石规格。是否已将其推送到RubyGems.org或任何其他远程gem存储库并不重要,因为您仍然可以使用您的规范生成gem包或提取有关项目的信息。

    例如,

    Gemnasium是一种解析您的.gemspec以确定和跟踪您的gem依赖关系的服务,它不会生成或下载任何包。

答案 1 :(得分:2)

我想说一个带有gemspec的项目现在是一个宝石。仅仅因为项目不在rubygems.org上就不应该阻止它被称为gem。最终,rubygems.org是一个宝石存储库,您不必使用它。 Github仓库或任何其他存储库可以被视为另一个来源。我也不要求将gem内置到Gem文件中。