跳转至内容

Ruby

来自 ArchWiki

Ruby 是一种动态的、解释执行的开源编程语言,专注于简单性和生产力。

安装

要使用 Ruby,请安装 ruby 包。

要安装 IRB,请安装 ruby-irb 包。

多个版本

如果您想在同一系统上运行多个版本(例如 2.0.0-p0 和 1.9.3-p392),最简单的方法是使用 RVMchrubyAURrbenvasdf-vmAUR 之一。

文档

要通过 ri 命令行工具访问文档,请安装 ruby-rdocruby-docs 来获取文档本身。然后您可以使用以下命令查询文档:ri Arrayri Array.pop 等(类似于 man-pages)。

JRuby

Ruby 的 Java 实现 JRuby 可以通过 jruby 包安装。

标准库

Ruby 标准库的一部分由 Ruby 模块组成(有关模块的更多信息,请参阅RubyGems)。ruby 包不包含 Ruby 用户可能期望在任何 Ruby 系统上都已安装的所有标准模块,因此某些 Ruby 代码可能无法开箱即用。有关标准库模块集合的更多信息,请访问 https://stdgems.org/

RubyGems 部分讨论了几种安装模块的方法。要使用 pacman 系统范围内安装标准模块,可以安装 ruby-stdlib 包。请注意,JRuby 不需要这个,因为 jruby 包已包含标准模块。

RubyGems

RubyGems 是 Ruby 模块(称为 gems)的包管理器,在某种程度上类似于 pacman 对于 Arch Linux 的作用。它可以与 rubygems 包一起安装,该包是 ruby 的一个依赖项。

配置

在 Arch Linux 中,默认情况下,运行 gem 时,gem 会按用户安装(安装到 ~/.local/share/gem/ruby/),而不是系统范围内安装(安装到 /usr/lib/ruby/gems/)。这被认为是管理 Arch 上 gem 的最佳方式,因为否则它们可能会干扰 pacman 安装的 gem。

推荐的设置方法是通过手动指定您的 $GEM_HOME,然后将其追加到您的 $PATH 环境变量中,以便允许执行 RubyGems 二进制文件。

~/.profile
export GEM_HOME="$(gem env user_gemhome)"
export PATH="$PATH:$GEM_HOME/bin"

这是使可执行 gem 在不输入完整路径的情况下工作的必要条件,尽管库在不修改路径的情况下也能工作。

注意 保存更改后,请重启终端以使更改生效。

使用 gem env 查看当前的 RubyGems 环境。

$ gem env

用法

查看已安装的 gem。

$ gem list

获取 gem 的信息。

$ gem spec gem_name

默认情况下,gem listgem spec 使用 --local 选项,该选项强制 gem 只搜索本地系统。这可以用 --remote 标志覆盖。因此,要搜索 mysql2 gem:

$ gem list --remote mysql2

安装一个 gem。

$ gem install mysql2

如果您不需要本地文档,则可以加快此过程。

$ gem install mysql2 --no-document
注意 通过配置以下 ~/.gemrc 文件,可以将此设置为默认选项。
~/.gemrc
gem: --no-document

更新所有已安装的 gem。

$ gem update

系统范围内安装 gem

可以通过以 root 身份运行 gem 命令并附加 --no-user-install 标志来系统范围内安装 gem。可以通过在 /etc/gemrc(系统范围)或 ~/.gemrc(按用户,覆盖系统范围)中将 --user-install 替换为 --no-user-install 来将此标志设置为默认值。

Bundler 可用于通过将 gem 打包到您的应用程序中来避免系统范围的 gem 安装。请参阅下面的关于使用 bundler 的部分。

Bundler

Bundler 允许您指定应用程序依赖于哪些 gem,以及可选地这些 gem 的版本。一旦设置好此规范,Bundler 就会安装所有必需的 gem(包括完整的 gem 依赖树)并记录结果以供以后检查。默认情况下,Bundler 将 gem 安装到一个共享位置,但也可以直接安装到您的应用程序中。当您的应用程序运行时,Bundler 会提供每个 gem 的正确版本,即使安装了多个 gem 版本。这需要一些工作:应用程序应使用 bundle exec 调用,并且两行样板代码必须放在应用程序的主可执行文件中。

安装 Bundler。

$ gem install bundler

开始一个新的 bundle。

$ bundle init

然后编辑当前目录中的 Gemfile(由 bundle init 创建)并列出您需要的 gem。

Gemfile
gem "rails", "3.2.9"
gem "mysql2"

运行以下命令将 gem 安装到 GEM_HOME

$ bundle install

或者,运行以下命令将 gem 安装到工作目录的 .bundle 中。

$ bundle config set --local path '.bundle'
注意 命令 `bundle install --path .bundle` 已弃用,因为它依赖于在 bundler 调用之间被记住,而 bundler 在未来版本中将不再这样做。但如果上述命令无效,可能是因为您的 ruby 版本较旧,您应该使用此命令。

不要忘记编辑您的主可执行文件。

#!/usr/bin/env ruby

# "This will automatically discover your Gemfile, and make all of the gems in
# your Gemfile available to Ruby." https://bundler.rubygems.org.cn/rationale.html
require 'bundler/setup'

...

最后,运行您的程序。

$ bundle exec main_executable_name.rb

使用 pacman 管理 RubyGems

您可以选择不使用 gem 来管理 gem,而是使用 pacmanAUR helper。Ruby 包遵循 ruby-gemname 的命名约定。

此选项提供了以下优势:

  • gem 会与您系统的其余部分一起更新。
  • 已安装的 gem 系统范围内可用,而不是只对安装它们的用户的可用。
注意 还有一些工具可以通过自动为指定的 gem 生成 PKGBUILD 来集成 gempacman:请参阅 创建包#PKGBUILD 生成器

Quarry

Quarry 是一个工具,允许维护 Arch Linux 的 rubygems 二进制仓库,作为手动从 AUR 构建包的更简单的替代方案。源代码托管在 Github

该仓库由 Arch 开发者 anatolik 在 https://pkgbuild.com/~anatolik/quarry/ 维护。它包含许多流行的 gem,并且可以根据要求添加新 gem。

要启用它,请参阅 非官方用户仓库#quarry

然后安装所需的 gem。包的名称是 ruby-gem-name

一般性问题可以在 https://bbs.archlinux.org/viewtopic.php?id=182729 提问。

交互式 Shell

Pry

Pry 是 Ruby 标准 IRB shell 的强大替代品。它具有语法高亮、灵活的插件架构、运行时调用以及源代码和文档浏览功能。

$ gem install pry
$ pry

性能调优

启用 JIT

ruby 在编译时已包含 JIT 支持,但默认情况下是禁用的。JIT 可以为长时间运行的程序(例如服务器)优化热代码路径。可以通过以下方式启用:

$ ruby --jit

对于不支持 --jit 的其他命令,您可以通过环境变量 RUBYOPT 将参数传递给 Ruby,例如 RUBYOPT=--jit

jemalloc

Ruby 可以使用 jemalloc 代替 malloc(3) 作为其默认内存分配器。这可以减少内存膨胀。要启用它,请安装 jemalloc 并以以下方式运行 Ruby:

$ LD_PRELOAD=libjemalloc.so ruby ...

要验证 jemalloc 是否实际被使用

$ LD_PRELOAD=libjemalloc.so MALLOC_CONF=stats_print:true ruby -e exit

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.