ruby - Ruby 项目在什么时候变成了 gem?

标签 ruby rubygems

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

毕竟gem install是安装不了的,即使使用了--source选项。

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

最佳答案

根据RubyGems Guides ,一个 gem 包含:

  • 代码

    没有 Ruby 代码就没有 Ruby 项目。

  • 文档

    根据项目的自述文件和源代码注释自动生成。

  • gem 规范

    项目元数据。

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

实际上,整个打包过程规范开始:

  1. 你喂 gem build一个.gemspec文件
  2. 它评估文件,这是有效的 Ruby 代码,并获得 Gem::Specification对象
  3. 它将规范中列出的文件添加到存档
  4. 它将编译的规范添加到第二个存档
  5. 它创建了你的 .gem文件,它只是这两个文件的容器

当你打开 .gem包裹,你发现了什么?

Open gem package

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

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

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

虽然 gem从技术上讲是软件包本身,该名词还非正式地用来指代可以打包为 gem 的整个项目– 具有 gem 规范的项目。它是否已被推送到 RubyGems.org 或任何其他远程 gem 存储库并不重要,因为您仍然可以使用您的规范生成 gem打包或提取有关项目的信息。

Gemnasium ,例如,是一项解析您的 .gemspec 的服务为了确定和跟踪您的 gem 的依赖项,它不会生成或下载任何包。

关于ruby - Ruby 项目在什么时候变成了 gem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106801/

相关文章:

ruby-on-rails - 最新的 omniauth-facebook gem 破坏设计

ruby-on-rails - 如何确定 ruby​​/ruby-on-rails 项目需要哪些 gem 和版本?

mysql - Ruby on Rails : Error on rake db:migrate

ruby - Watir:通过 bgcolor 标签搜索表格单元格并获取列号

mysql - 仅删除 Rails 4 中表之间的连接记录

ruby-on-rails - 有没有办法从 Ruby on Rails 构建输出静态文件?

ruby - 什么是液体异常 'certificate verify failed'?

ruby - 使用 RVM 的 Mac OS X Lion Xcode 问题

ruby - 在实例化时将类转换为子类

ruby-on-rails - 如何在 Ruby on Rails 3 中为每个用户连续编号项目?