概述
Ruby中有一些概念比较复杂,容易混淆:rake、Rakefile、gem、gemspec、bundler、bundle、Gemfile
概述
这几个都是Ruby语言中的概念。下面我分别介绍一下各个名词的含义,并将其与其他类似工具做比较,以便读者理解。
Ruby
Ruby
是红宝石的意思,是编程语言的名字。Ruby
语言的logo就是一颗红宝石。
Ruby
是一门开源的动态编程语言,注重简洁和效率。其句法优雅,读起来自然,写起来舒适。
Ruby
语言源文件的后缀是.rb
。
rake和Rakefile
rake
是Ruby
语言的类make
程序。可以在其中定义任务和源码依赖。
rake = r(uby’s m)ake
就像make
有Makefile
文件一样,rake
有对应的Rakefile
。
它们都属于构建工具的范畴。
表格展示如下:
语言 | 构建工具名称 | 构建工具配置文件 |
---|---|---|
C | Make | Makefile |
Ruby | Rake | Rakefile |
gem和gemspec
gem
是宝石的意思。能够很容易想到跟Ruby
红宝石同处一系。
gem
是Ruby
的包管理系统,命令是gem
,包名后缀也是.gem
,类似于rpm
。
不过rpm
只能安装本地包,不能联网下载。联网下载需使用yum
或dnf
。
同样的,Debian系,包管理系统是dpkg
,不能联网下载。联网下载需使用apt
。
gemspec文件,是gem的描述文件,包含gem相关的信息,如包名、版本、简介、描述、作者、主页等。
类似的,dpkg打包需要spec文件,deb打包需要control文件。
表格展示如下:
语言 | 包管理系统 | 包后缀 | 本地 | 联网 | 描述文件名 |
---|---|---|---|---|---|
Ruby | gem | .gem | ✅ | ✅ | <package-name>.gemspec |
Red Hat系 | rpm | .rpm | ✅ | ❌ | SPECS/<package-name>.spec |
Red Hat系 | yum/dnf | .rpm | ❌ | ✅ | - |
Debian系 | dpkg | .deb | ✅ | ❌ | debian/control |
Debian系 | apt | .deb | ❌ | ✅ | - |
这里要注意,gem对应的文件是gemspec。Gemfile和gem无关,它其实是bundler的配置文件名称。
bundler、bundle和Gemfile
bundler
是Ruby应用的外部依赖管理工具。
bundle
是另一个gem,是用来解决”把bundler误拼写成bundle”的问题,唯一功能就是安装bundler,使两者同意而不报错。
Gemfile
文件描述执行相关Ruby应用需要的外部依赖gem,包含源、gem名称、gem版本等信息。
执行bundler install
时,bundler
会读取Gemfile
文件并一次性安装所有依赖gem。
总结
rake是Ruby语言的构建工具,它的配置文件是Rakefile。和make、cmake是一类东西。
gem是Ruby语言的包管理工具,它的配置文件后缀是.gemspec。和rpm、dpkg类型。和app store是一类东西。
bundler是Ruby语言的外部依赖管理工具,它有一个别名叫”bundle”,它的配置文件是Gemfile。类似ivy。
由此可以看出,这里有三个不同的层次,由源代码,变成产物,需要构建工具;而构建产物分为两类,一类是依赖库,一类是用户使用的产品。依赖库有依赖管理工具;产品一般是由开发者或开发企业自行宣传推广,但有些也有专门的地方来分发,比如Linux的软件源仓库、苹果的App Store等。在不同的编程语言体系中,有些工具是合并了所有的功能,有些是合并了其中的两种,有些则可能有缺失。
以大家熟悉的Java举例,Ant是单一的构建工具,其可以和ivy依赖管理工具配合使用;而maven包含了ant和ivy的功能,既是构建工具,又能管理依赖;Java没有统一的应用商店/软件源来安装软件。