第十章 部署Ruby应用和程序库
其实我觉得自己貌似不太用的上这一章啊………………
Ruby是解释型语言
C,C++等是编译型语言
如果想把Ruby程序发布给不熟悉Ruby解释器的人,可以采用以下方法:
1.shebang行,在UNIX类系统上运用,是指以#!开头的行。
可以在第一个运行文件(不需要是整个程序之外)中写下“#! /usr/bin/env ruby"这一行
运行的时候直接加”./文件名“
或者还可以使用chmod命令把Ruby脚本文件的属性设置为”可执行“
2.关联Windows的文件类型
在Windows系统下通过设置扩展名、关联解释器等等
详见 http://support.microsoft.com/kb.307859
3.”编译“Ruby程序
使用 RubyScript2Exe(适用于Windows和Linux系统) ,将Ruby源代码转换为可执行文件
使用Platypus(适用于Mac OS X的通用开发工具)
环境变量:irb中使用特殊的ENV散列值,可以迅捷简便地检查当前机器的环境变量。
---------------------------------------------------------------------------------------------------------
以gem包形式发布Ruby程序库
创建gem包:
1.整理文件
创建文件夹中包含所有gem文件,其子文件夹需要有lib(放源代码),pkg(临时目录,生成gem包),test,doc,bin
2.创建规格说明文件
在gemspec后缀的文件中填写基本的规格说明文件。
3.生成gem包
gem build <spec file>
更简单的创建gem包方法:
newgem工具一步到位创建gem目录结构和默认文件
第十一章 Ruby高级功能
Ruby是动态的解释型语言,它可以执行动态创建的代码,方法是用eval方法。
绑定(binding)是指对上下文环境、作用域或执行状态的引用。
可以把绑定传递给eval并让eval执行该绑定中的代码,而不是执行当前代码。
-------------------------------------------------------------------------------------------------------------
从Ruby中运行其他程序:
调用方法:system命令(在Kernel模块定义),反引号语法(' ')和定界输入字面值(%x{ })【注:%x{ }在功能上与反引号等价】
向其他程序移交执行权:exec "ruby another_script.rb"
分支(forking)是指程序的实例(进程)复制自身,导致该程序的两个进程并发运行。
如果另一个程序(即被exec命令所运行的程序)在某个时刻被终止,并且你想让父程序等它运行结束,则可以使用Process.wait
popen方法是IO模块的,可以运行另一程序,并在当前程序和对方之间建立I/O流。
-------------------------------------------------------------------------------------------------------------
Ruby有两种方法使自己更安全:1.检查外部数据是否被感染,2.设置安全级别
感染:如果数据来自外部源头,或如果Ruby没有办法证实数据是否安全,则一般认为这些数据被感染了。
判断感染:可以用tainted?方法来检查【如果只是检查整体数据结构,而不是每片数据,则有可能无法正确检测出是否感染了】
安全级别:由$SAFE变量表示
$SAFE的值 | 说明 |
0 | 没有任何限制,默认的安全级别 |
1 | 可能不安全的方法无法使用感染的数据,而且,当前目录不加到Ruby的搜索路径,该路径用于载入程序库 |
2 | 对安全级别1进行限制,增加不让Ruby从文件系统的全局可写位置载入任何外部程序文件的限制。这是为了防止黑客通过上传攻击性代码,并操纵现有程序载入这些代码的方式进行攻击 |
3 | 对安全级别2进行限制,增加自动把程序中新创建对象视为感染的限制,并且无法消除对象的感染状态 |
4 | 对安全级别3进行限制,增加无法修改其他安全级别所创建的非感染对象的限制。可以借此建立一个低安全模式的运行环境,程序可以继续执行,但保护原来的对象和环境不受影响。 |
线程:Ruby中的线程目前不是传统意义上的系统级别线程,功能也稍微弱些
当用join方法等待线程结束时,可以指定等待的超时值,如果线程尚未结束,则join返回nil
获取全部线程列表:Thread.list
--------------------------------------------------------------------------------------------------------------
其他语言嵌入Ruby:
RubyInline程序库可以用来编写C或C++代码
第十二章 综合演练:开发更大型的Ruby应用