您的位置:首页 > 编程语言 > Ruby

《Ruby从入门到精通》部署Ruby应用和程序库 Ruby高级功能 综合演练

2012-02-20 09:08 225 查看
第十章 部署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应用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: