Ruby应用与库的部署指南
立即解锁
发布时间: 2025-08-20 01:30:32 阅读量: 4 订阅数: 3 


Ruby编程入门与实践指南
# Ruby 应用与库的部署指南
## 1. 基本 Ruby 程序的分发
Ruby 是一种解释型语言,分发 Ruby 程序时,只需分发你编写的源代码文件。只要其他用户的机器安装了 Ruby,就能像你一样运行这些文件。例如,有一个名为 `test.rb` 的文件:
```ruby
puts "Your program works!"
```
将 `test.rb` 复制到安装了 Ruby 解释器的计算机上,就可以直接使用 Ruby 解释器运行:
```bash
ruby test.rb
```
输出结果为:
```
Your program works!
```
这种方法在你自己的机器或服务器之间传递程序,或者将程序分发给其他开发者时非常有效。只要其他用户和机器拥有你的程序所使用的相同 Ruby 库或 gem,程序就应该能正常运行。这也是解释型语言相对于编译型语言的一个优势,只要不同平台上有相同版本的 Ruby 解释器,就能运行相同的程序。
不过,如果你想将 Ruby 程序分发给不熟悉 Ruby 解释器的人,根据目标操作系统的不同,有几种方法可以简化 Ruby 应用的部署。
### 1.1 Shebang 行
在 Unix 相关的操作系统(如 Linux、OS X、BSD 等)上,可以使用 Shebang 行让程序更简单地运行。Shebang 行是文件第一行以 `#!` 开头的行,用于指定解释器。例如:
```ruby
#!/usr/bin/ruby
puts "Your program works!"
```
这里使用 `/usr/bin/ruby` 作为解释器来解释文件的其余部分。但可能会遇到 Ruby 解释器位置不同的问题,不过可以使用 `env` 工具来解决。`env` 工具存储了某些应用程序和设置的位置,示例如下:
```ruby
#!/usr/bin/env ruby
puts "Your program works!"
```
将这个示例复制到许多不同的 Linux 或 OS X 机器上,大多数情况下都能正常工作。如果这个脚本名为 `test.rb` 且位于当前工作目录,可以直接从命令行运行:
```bash
./test.rb
```
需要注意的是,在大多数类 Unix 操作系统上,除了添加 Shebang 行,还需要使用 `chmod` 命令使 Ruby 脚本具有可执行权限,例如:
```bash
chmod +x test.rb
```
如果将脚本复制到其他位置(如 `/usr/bin`),可以直接访问:
```bash
/usr/bin/test.rb
```
如果脚本的位置在系统路径中,运行会更简单:
```bash
test.rb
```
### 1.2 Windows 中的关联文件类型
在 Windows 系统中,用户更习惯通过文件扩展名(如 DOC、EXE、JPG、MP3 或 TXT)来决定文件的处理方式。如果想在 Windows 中双击 Ruby 文件并让它们直接作为常规 Ruby 程序运行,可以通过更改 `.rb` 文件(或其他任意扩展名)的默认操作来实现。
具体操作步骤如下:
1. 找到包含 Ruby 文件的文件夹,右键单击代表 Ruby 文件的图标。
2. 选择“打开方式”(如果当前未与任何程序关联,则选择“打开”)选项。
3. 选择计算机上的 `ruby.exe` Ruby 解释器,并勾选“始终使用所选程序打开此类文件”选项。
### 1.3 “编译” Ruby
虽然 Ruby 不能像编译型语言那样编译成单个整洁的可执行文件,但有一些工具可以模拟这种效果。
#### 1.3.1 RubyScript2Exe
RubyScript2Exe 可以将 Ruby 源代码转换为主要用于 Windows 和 Linux 的可执行文件。它会收集你的源代码以及应用程序运行所需的所有文件,并将它们打包成一个像典型应用程序一样工作的文件。可以访问 [官方网站](http://www.erikveen.dds.nl/rubyscript2exe/) 下载和了解更多信息。
#### 1.3.2 Platypus
Platypus 是 Mac OS X 的通用开发工具,可以从 Ruby 脚本以及其他解释型语言(如 Perl、Python 和 PHP)的脚本创建原生集成应用程序。它具有比 RubyScript2Exe 更多的功能,例如可以加密输出文件,使源代码不直接可见,还能实现拖放功能、嵌入非 Ruby 文件等。可以从 [官方网站](http://www.sveinbjorn.org/platypus) 获取 Platypus。
## 2. 检测 Ruby 的运行时环境
在 Ruby 中,可以使用一些技术来检测程序运行的环境,从而更好地与周围环境进行交互。
### 2.1 使用 RUBY_PLATFORM 轻松检测操作系统
Ruby 提供了一个特殊变量 `RUBY_PLATFORM`,它包含了当前运行的环境(操作系统)的名称。可以通过查询这个变量来检测程序运行的操作系统,示例代码如下:
```ruby
if RUBY_PLATFORM =~ /win32/
puts "We're in Windows!"
elsif RUBY_PLATFORM =~ /linux/
puts "We're in Linux!"
elsif RUBY_PLATFORM =~ /darwin/
puts "We're in Mac OS X!"
elsif RUBY_PLATFORM =~ /freebsd/
puts "We're in FreeBSD!"
else
puts "We're running under an unknown operating system."
end
```
### 2.2 环境变量
当程序在计算机上运行时,会处于特定的环境中,操作系统会设置一些特殊变量,称为环境变量,包含有关环境的信息。可以使用 `irb` 中的特殊 `ENV` 哈希来快速检查当前机器上的环境变量,示例如下:
```ruby
irb(main):001:0> ENV.each {|e| puts e.join(': ') }
```
在不同操作系统上运行上述代码会得到不同的结果。可以使用这些环境变量来决定临时文件的存储位置,或者实时了解操作系统提供的功能,示例代码如下:
```ruby
tmp_dir = '/tmp'
if ENV['OS'] =~ /Windows_NT/
puts "This program is running under Windows NT/2000/XP!"
tmp_dir = ENV['TMP']
elsif ENV['PATH'] =~ /\/usr/
puts "This program has access to a UNIX-style file system!"
else
puts "I cannot figure out what environment I'm running in!"
exit
end
# 在这里做一些事情
```
需要注意的是,可以使用 `ENV['variable_name'] = value` 设置环境变量,但只有在有合理理由时才这样做,并且从程序内部设置的环境变量仅适用于本地进程和任何子进程,应用范围非常有限。虽然 `ENV` 表现得像一个哈希,但它实际上是一个特殊对象,可以使用 `.to_hash` 方法将其转换为真正的哈希,例如 `ENV.to_hash`。
### 2.3 访问命令行参数
在 Ruby 中,有一个特殊的数组 `ARGV`,它由 Ruby 解释器自动创建,包含传递给 Ruby 程序的参数。例如,有一个名为 `argvtest.rb` 的脚本:
```ruby
puts ARGV.join('-')
```
可以这样运行:
```bash
ruby argvtest.rb these are command line parameters
```
输出结果为:
```
these-are-command-line-parameters
```
在 Unix 操作系统上,也可以直接调用脚本。将 `argvtest.rb` 修改如下:
```ruby
#!/usr/bin/env ruby
puts ARGV.join('-')
```
然后这样调用:
```bash
./argvtest.rb these are command line parameters
```
通常使用命令行参数来传递程序执行之间可能会改变的选项、设置和数据片段。
## 3. 以 Gem 形式分发和发布 Ruby 库
随着时间的推移,你可能会开发自己的 Ruby 库来解决各种问题,避免在不同程序中重复编写相同的代码。将这些库分发给其他开发者或在不同机器上使用是很有必要的。RubyGems 是一个 Ruby 库的安装和管理系统,它不仅可以方便地安装库,还能让你从自己的代码创建“gem”。
### 3.1 创建 Gem
首先,创建一个简单的库,扩展 `String` 类,并将其放在名为 `string_extend.rb` 的文件中:
```ruby
class String
def vowels
scan(/[aeiou]/i)
end
end
```
这段代码为 `String` 类添加了一个 `vowels` 方法,用于返回字符串中所有元音字母的数组:
```ruby
"This is a test".vowels
# 输出: ["i", "i", "a", "e"]
```
作为一个较大应用程序范围内的本地库,可以使用 `require` 加载:
```ruby
require 'string_extend'
```
要将其变成一个可以在任何地方使用的 gem,需要完成以下三个步骤:
1. **组织文件结构**:在构建 gem 之前,需要收集构成 gem 的所有文件,并使用标准结构进行组织。创建一个名为 `string_extend` 的文件夹,在其下创建以下文件夹:
- `lib`:包含与库相关的 Ruby 代码。
- `pkg`:临时目录,用于生成 gem。
- `test`:包含与库相关的任何单元测试或其他测试脚本。
- `doc`(可选):包含库的文档,特别是使用 `rdoc` 创建的文档。
- `bin`(可选):包含与库相关的系统工具和命令行脚本。
至少需要有 `string_extend/lib`、`string_extend/pkg` 和 `string_extend/test`。将 `string_extend.rb` 放在 `string_extend/lib` 目录中。如果有测试、文档或命令行脚本,将它们放在相应的目录中。
2. **创建规范文件**:创建一个名为 `string_extend.gemspec` 的文本文件,内容如下:
```ruby
require 'rubygems'
spec = Gem::Specification.new do |s|
s.name = 'string_extend'
s.version = '0.0.1'
s.summary = "StringExtend adds useful features to the String class"
s.files =
```
0
0
复制全文
相关推荐









