如果我创建一个满足RubyGem所需结构的Ruby项目,包括一个有效的gem spec文件,并将其托管在Git存储库中,但尚未将其构建到myproject.gem
文件中,严格来说,它是一颗宝石吗?
毕竟,gem install
无法安装它,即使使用--source
选项也是如此。
NB。我意识到Bundler能够安装这样的项目。
答案 0 :(得分:4)
根据RubyGems Guides,宝石包含:
<强>代码强>
如果没有Ruby代码,你就无法拥有一个Ruby项目。
<强>文档强>
从项目的README文件和源代码注释中自动生成。
宝石规格
项目元数据。
根据这个定义,可以看出Ruby项目和gem之间的唯一区别是规范。
实际上,整个打包过程以规范
开始gem build
.gemspec
个文件提供Gem::Specification
对象.gem
文件,该文件只是这两个档案的容器当您打开.gem
包时,您会找到什么?
您的项目文件和元数据。是的,基本上就是这样:一个包含大量项目元数据的美化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文件中。