# Ruby (简体中文)

翻译状态： 本文是英文页面 Ruby 的翻译，最后翻译时间：2013-04-30，点击这里可以查看翻译后英文页面的改动。

Ruby 是一门专注于简洁和生产里的动态语言, 是解释型语言, 开源编程语言.

## 安装 Ruby

按照需要来选择安装 Ruby 的版本. 为了支持遗留下来的软件, 必要时请安装 Ruby 1.9 甚至 1.8. 开展新项目建议 Ruby 2.0 .以下是一个概要, 关于当前有的版本和如何获取.

### Ruby 2.0

要安装 Ruby 2.0.0, 安装 ruby 这个包. Ruby 2.0 包含了 #RubyGems.

### Ruby 1.9

要从 AUR 安装 Ruby 1.9.3, 安装 ruby1.9AUR. Ruby 1.9 包含了 RubyGems.

### 多版本

如果你要在同一个系统安装多个版本 (比如 2.0.0-p0 和 1.9.3-p392), 最简单的办法时安装 RVM 或者 rbenv.

## RubyGems

gem 是 Ruby 模块 (叫做 Gems) 的包管理器, 某种程度上是 pacman 相对于 Arch Linux 的角色. gem 命令你可以通过遵循上边的操作来得到.

### 用例

查看已安装有那些 gem:

    $ gem list

获取某个 gem 的详细信息:

    $ gem spec <gem_name>

默认情况下, `gem list` 和 `gem spec` 开启了 `--local` 选项, 导致 gem 只会在本地系统里进行搜索. 这可以用 `--remote` 参数来覆盖. 这样子以后, 来搜索一个 mysql gem:

    $ gem list --remote mysql

安装一个 gem:

    $ gem install mysql

安装过程可以加快一点, 如果你不需要本地的文档的话:

    $ gem install mysql --no-rdoc --no-ri

更新所有已安装的 gem:

    $ gem update

### 普通用户身份运行

作为普通用户安装 gem 的时候, gem 默认被安装在 `~/.gem` 而不是在系统全局. 这在 Arch 上被认为是做回的管理 gem 的方案. 不巧的是并非所有 gem 都乐意被安装在这, 甚至可能坚持要以 root 身份安装, 特别是模块含有本地扩展(从 C 编译的代码). 每个用户的方案被配置在 `/etc/gemrc` 文件里, 可以通过配置 `~/.gemrc` 文件来改变.

为了使用一些安装了可执行文件的 gem, 需要把 `$(ruby -e 'print Gem.user_dir')/bin` 添加到你的 `$PATH` 环境变量里.如果以上命令无法生效, 可以使用下面命令代替:

     #Setting the GEM_PATH and GEM_HOME variables may not be necessary, check 'gem env' output to verify whether both variables already exist
     GEM_HOME=$(ls -t -U | ruby -e 'puts Gem.user_dir')
     GEM_PATH=$GEM_HOME
     export PATH=$PATH:$GEM_HOME/bin

### 以 root 身份运行

以 root 身份运行时 gem 会被安装在 `/root/.gems`, 而且不会被安装到 `/usr/lib/ruby/gems/`.

注意: 访问 bug #33327 查看更多信息.

Bundler 通过把模块打包到你的项目目录, 一定程度上解决了这些问题. 细节看下面关于使用 bundler.

### Bundler

Bundler 帮助你指定你的项目需要使用哪些 gem, 还有可选地指定哪个版本被需要. 当声明恰当时, Bundler 会安装所有依赖的 gem (包括整个依赖树), 后期检查之后还会打印出 log. Bundler 默认是安装 gem 到一个共享的路径, 不过也可以指定直接安装到你的应用. 当你项目运行的时候, Bundler 就提供每个 gem 正确的版本, 即便安装的 gem 其实有多个版本. 这需要有一点工作: 应用需要以 `bundle exec` 命令运行, 还有两行的 boilerplate 代码要被写在你的应用的可执行文件里.

安装 Bundler:

    $ gem install

Bundler 默认把 gem 安装在系统全局, 这跟 Arch 上处理 gem 的方案正好相反. 纠正的办法的话, 添加下面的配置到你的 `~/.bashrc`:

    export GEM_HOME=~/.gem/ruby/2.0.0

新建一个 bundle:

    $ bundle init

然后编辑当前目录 (gem init 执行的目录)下的 `Gemfile` 添加你需要的 gem:

    Gemfile

    gem "rails", "3.2.9"
    gem "mysql"

运行下面的命令安装需要的 gem 到 `GEM_HOME`:

    $ bundle install

或者作为可选方案, 运行下面的命令把 gem 安装到工作路径的 `.bundle`:

    $ bundle install --path .bundle

别忘了要编辑你主要的执行文件:

    #!/usr/bin/env ruby

    # "This will automatically discover your Gemfile, and make all of the gems in
    # your Gemfile available to Ruby." http://gembundler.com/v1.3/rationale.html
    require 'rubygems'
    require 'bundler/setup'

    ...

最后运行你的程序:

    bundle exec <main_executable_name.rb>

## 用 pacman 管理 RubyGems

除了用 `gem` 命令管理 gem, 也可以用 `pacman`, 或者一些 AUR 帮助工具. Ruby 模块遵循这样的命名惯例 ruby-[gemname]. 这个方案提供了以下的优点:

- Gems 和你系统其他部分一样被升级. 这样你就不用去运行 `gem update`: 运行 `pacman -Syu` 足够了.
- 已安装的 gem 在全系统可用, 而不是只有安装了这些 gem 的用户.

如果 gem 在仓库里没有, 你可以用 pacgemAUR 自动创建一个, 这个模块接下来就能直接用 pacman 来安装.

## 又见

- Ruby on Rails

## 引用

- Ruby - http://ruby-lang.org/
- Rubyforge - http://rubyforge.org
- Bundler - http://github.com/carlhuda/bundler

Category:

- Programming languages (简体中文)