《Ruby程序员修炼之道》(第2版)—第1章1.2节剖析Ruby的安装-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

《Ruby程序员修炼之道》(第2版)—第1章1.2节剖析Ruby的安装

简介: 在系统上安装Ruby意味着在许多磁盘目录中安装了Ruby语言的库和支持文件。大多数时候,Ruby都知道如何找到其所需要的这些目录而不用弹出提示。但是了解Ruby安装的知识对了解Ruby本身大有益处。

本节书摘来自异步社区《Ruby程序员修炼之道》一书中的第1章,第1.2节剖析Ruby的安装,作者【美】David A. Black(戴维 A. 布莱克),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 剖析Ruby的安装
在系统上安装Ruby意味着在许多磁盘目录中安装了Ruby语言的库和支持文件。大多数时候,Ruby都知道如何找到其所需要的这些目录而不用弹出提示。但是了解Ruby安装的知识对了解Ruby本身大有益处。

查看Ruby的源代码

除了Ruby安装目录体系之外,Ruby的源代码目录也安装好了。如果没有,可以到Ruby的主页中下载。源代码目录中包含了许多在最终安装中出现的Ruby文件和许多已编译为目标文件并安装好的C语言文件。另外,源代码目录包含了一些如ChangeLog和软件授权文件这样的资料类型文件。
Ruby安装文件的位置很容易获取。要得到这些信息,只需要在irb会话中加载名为rbconfig的Ruby库。rbconfig是一个接口,通过它可以得到关于Ruby安装的许多内部编译的配置信息,可以通过irb的命令行标志-r和指定的包名调用irb去加载它:

$ irb --simple-prompt -rrbconfig
现在可以获取这些信息了。例如,可以找到Ruby可执行文件(包括ruby和irb)的安装目录:

RbConfig::CONFIG["bindir"]
RbConfig::CONFIG是一个引用散列(hash,是一种数据结构)的常量,用于在Ruby中保存配置信息。字符串"bindir"是散列的主键。用"bindir"这个主键查询散列将返回对应的值,这个值是安装二进制文件的目录名。

其余的配置信息也使用相同的方式获取:通过散列的主键访问配置信息中的值。如果要获得其他安装信息,在irb命令中替换bindir为其他词语。但是每次都要遵循相同的基本原则:RbConfig::CONFIG["术语"]。表1-5概括了这些术语及其指向的目录。


67493b1aac2fe741d7f9cd6ef9790af71426d513

这就是对Ruby主要的安装目录和其包含内容的一个概述。此刻不必记住它们,但要意识到需要时如何找到它们(或者好奇时浏览一下并查看Ruby的代码示例!)。

1.2.1 Ruby标准库子目录(RbConfig::CONFIG[rubylibdir])
在rubylibdir目录中,可以看到用Ruby编写的程序文件。这些文件提供了标准库的功能,如果需要它们提供的功能,可以在程序中请求(require)它们。在本目录中可以找到以下文件。

  • cgi.rb:CGI编程工具库。
  • fileutils.rb:易用的文件操作实用工具。
  • tempfile.rb:自动创建临时目录的机制。
  • drb.rb:分布式编程工具。

在标准库中有一些库,如drb,由多个文件构成。可以看到目录中有一个drb.rb文件,并且整个drb子目录包含了drb库的所有组件。

浏览rubylibdir子目录能够对Ruby提供的编程工具所能完成的任务有一个感性认识(也许一开始就是颠覆性的)。大多数程序员只使用了这些工具的子集,但这些巨大的编程库集合的子集也已经能够提供许多功能。

1.2.2 C语言扩展目录(RbConfig::CONFIG[archdir])
通常archdir目录位于rubylibdir下的第一级目录中,它包含了特定架构的扩展和库文件。通常在目录中,这些文件都是以.so、.dll、.bundle(依赖于硬件和操作系统)为文件扩展名的。这些文件是C语言扩展:它们是二进制文件,是运行时可加载的文件,由Ruby的C语言扩展代码生成,并在Ruby安装过程中编译成为二进制格式。

如在rubylibdir目录中的Ruby语言程序文件,archdir目录中的文件包含了能够加载到用户程序的标准库组件。(除此之外,还有一些rbconfig的扩展文件,这些扩展可以使用irb命令去发现它们。)这些文件不是用户可读的,但是Ruby的解释器可以读懂它们。从Ruby程序员的视角来说,由于它们都被编译为了二进制格式文件,所以所有的标准库使用都是一样的,不管它们是用Ruby编写的还是用C语言编写的。

安装在archdir目录的文件,每个平台安装的都不相同,它们依赖于其被编译的扩展。这个扩展又反过来取决于由个人请求编译的内容和Ruby能够编译的扩展所组成的代码库。

1.2.3 site_ruby(RbConfig::CONFIG[sitedir])和vendor_ruby (RbConfig::CONFIG[vendordir])目录
在Ruby安装目录中包括一个名为site_ruby的子目录,它用于存储用户和系统管理员安装的第三方扩展和库文件。该目录中可能包括了用户所写的程序,还有一些从其他网站下载的工具包,以及Ruby库文件的存档。

site_ruby目录包含Ruby语言和C语言的不同子目录(是RbConfig::CONFIG中不同的两个项,分别为sitelibdir和sitearchdir),就这个意义而言,其与Ruby主安装目录并存在一个目录下。当用户请求一个扩展,Ruby解释器检查site_ruby下的子目录,也同时检查主rubylibdir目录和主archdir目录。

与site_ruby目录并存的是vendor_ruby目录。第三方的扩展都安装于此。vendor_ruby目录首次出现是在Ruby1.9中,从这两个目录中获得的包仍然在不断发展中。

1.2.4 gems目录
RubyGems实用工具是打包和发布Ruby库文件的标准方式。当用户安装gems(被称为包)时,未绑定的库文件则会放置于gems目录。这个目录没有在配置数据结构(RbConfig::CONFIG) 中列出,但是通常都和site_ruby在同一级目录。假如读者找到了site_ruby,便可以看看gems目录中还安装了什么。在1.4.5节中将会了解更多关于gems的知识。

在这一节中,学到了Ruby调用扩展的机制和语义,这也是编写和安装扩展时需要用到的知识。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: