Ruby
Ruby 是一种动态的、解释执行的开源编程语言,专注于简单性和生产力。
安装
多个版本
如果您想在同一系统上运行多个版本(例如 2.0.0-p0 和 1.9.3-p392),最简单的方法是使用 RVM、chrubyAUR、rbenv、asdf-vmAUR 之一。
文档
要通过 ri 命令行工具访问文档,请安装 ruby-rdoc 和 ruby-docs 来获取文档本身。然后您可以使用以下命令查询文档:ri Array、ri 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 list 和 gem 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'
不要忘记编辑您的主可执行文件。
#!/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,而是使用 pacman 或 AUR helper。Ruby 包遵循 ruby-gemname 的命名约定。
此选项提供了以下优势:
- gem 会与您系统的其余部分一起更新。
- 已安装的 gem 系统范围内可用,而不是只对安装它们的用户的可用。
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