Ruby

出自 Arch Linux 中文维基

Ruby 是一門專注於簡潔和生產力的動態解釋型開源編程語言。

安裝 Ruby[編輯 | 編輯原始碼]

要安裝最新版本的 Ruby,安裝 ruby 包。

要安裝 IRB,安裝 ruby-irb 包。

多版本[編輯 | 編輯原始碼]

如果你要在同一系統中運行多個版本 (比如 2.0.0-p0 和 1.9.3-p392),最簡單的辦法就是使用 RVMchrubyAURrbenv 或者 asdf-vmAUR.

文檔[編輯 | 編輯原始碼]

要通過 ri 命令行工具訪問文檔,安裝 ruby-rdoc(工具)和 ruby-docs(文檔)。 你可以這樣查詢文檔:ri Arrayri Array.pop 等等(很像手冊頁)。

JRuby[編輯 | 編輯原始碼]

Ruby 的 Java 實現,JRuby 可通過 jruby 包安裝。

RubyGems[編輯 | 編輯原始碼]

RubyGems 是 Ruby 模塊(稱為 gems) 的包管理器,在某種程度上和 pacman 與 Arch Linux 的關係相當。它可通過 rubygems 包安裝(rubygemsruby 的其中一個依賴項)。

設置[編輯 | 編輯原始碼]

添加 $(ruby -e 'print Gem.user_dir')/binPATH 環境變量 來允許 RubyGems 被執行:

~/.profile
PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"

這樣而不是輸入完整的路徑對可執行的 gems 是必需的,儘管庫工作並不需要修改你的路徑。

為了允許當前 用户 安裝 RubyGems,例如 你的用户帳號不允許安裝到系統 RubyGems。,你可以設置 GEM_HOME 為本地路徑:

$ export GEM_HOME=$HOME/.gem

你可能想把這個變量追加到 .profile 中:

~/.profile
PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"
export GEM_HOME=$HOME/.gem

使用 gem env 來查看當前的 RubyGems 環境:

$ gem env

用法[編輯 | 編輯原始碼]

查看已安裝有那些 gem:

$ gem list

獲取某個 gem 的詳細信息:

$ gem spec "gem_name"

默認情況下,gem listgem spec 開啟了 --local 選項,導致 gem 只會在本地系統裏進行搜索。這可以用 --remote 參數來覆蓋。這樣來搜索一個 mysql gem:

$ gem list --remote mysql

安裝一個 gem:

$ gem install mysql

安裝過程可以加快一點,如果你不需要本地的文檔的話:

$ gem install mysql --no-document
注意: 這可以通過配置以下 ~/.gemrc 文件成為默認選項:
~/.gemrc
gem: --no-document

更新所有已安裝的 gem:

$ gem update

安裝每個用户或全系統的 gems[編輯 | 編輯原始碼]

在 Arch Linux 下運行 gem 時,gems 默認是為用户安裝的(安裝到 ~/.gem/ruby​​/),而不是系統範圍內(安裝到 /usr/lib/ruby/gems/)。這被認為是 Arch 上管理 gems 的最好方式,因為否則它們可能會干擾 pacman 安裝的寶石。

可以通過以 root 身份運行 gem 命令並附加 --no-user-install 標誌以在系統範圍內安裝 gems。這可以被設置為默認通過在 /etc/gemrc(系統範圍)或在 ~/.gemrc(用户,覆蓋系統範圍) 中用 --no-user-install 替換 --user-install

Bundler 通過將寶石打包到您的應用程式中來解決這些問題。請參閱下面關於使用 bundler 的部分。

Bundler[編輯 | 編輯原始碼]

Bundler 幫助你指定你的項目需要使用哪些 gem,還有可選地指定哪個版本被需要。當聲明恰當時,Bundler 會安裝所有依賴的 gem (包括整個依賴樹),後期檢查之後還會打印出 log。Bundler 默認是安裝 gem 到一個共享的路徑,不過也可以指定直接安裝到你的應用。當你項目運行的時候,Bundler 就提供每個 gem 正確的版本,即便安裝的 gem 其實有多個版本。這需要有一點工作:應用需要以 bundle exec 命令運行,還有幾行的 boilerplate 代碼要被寫在你的應用的可執行文件裡。

安裝 Bundler:

$ gem install bundler

Bundler 默認把 gem 安裝在系統全局,這跟 Arch 上處理 gem 的方案正好相反。要解決這個問題,添加下面的配置到你的 ~/.bashrc:

export GEM_HOME=$(ruby -e 'print Gem.user_dir')

新建一個 bundle:

$ bundle init

然後編輯當前目錄 (gem init 執行的目錄)下的 Gemfile 添加你需要的 gem:

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

運行下面的命令安裝需要的 gem 到 GEM_HOME:

$ bundle install

或者作為可選方案, 運行下面的命令把 gem 安裝到工作路徑的 .bundle:

$ bundle config set --local path '.bundle
注意: 命令 `bundle install --path .bundle` 已經過時。但如果你的 bundle 或 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.io/rationale.html
require 'bundler/setup'

...

最後運行你的程序:

bundle exec main_executable_name.rb

Managing RubyGems using pacman[編輯 | 編輯原始碼]

Instead of managing gems with gem, you can use pacman, or an AUR helper. Ruby packages follow the naming convention ruby-gemname.

This option provides the following advantages:

  • Gems are updated along with the rest of your system.
  • Installed gems are available system-wide, instead of being available only to the user who installed them.
注意: There are also tools integrating gem with pacman by automatically generating PKGBUILDs for specified gems: see Creating packages#PKGBUILD generators.

Quarry[編輯 | 編輯原始碼]

Quarry is an opensource tool (GPL3 license) that allows to maintain rubygems binary repository for Arch Linux, as an easier alternative to building packages manually from the AUR. The source is hosted at github.

The repository is maintained by Arch developer anatolik at https://pkgbuild.com/~anatolik/quarry/, and is currently for the x86_64 architecture only. It contains many popular gems and new gems can be added upon request.

See Unofficial user repositories#quarry to enable it.

Then install required gem # pacman -S ruby-$gemname.

If you have general questions - send it at the project announcement https://bbs.archlinux.org/viewtopic.php?id=182729
If you have bugreports or code improvements - file at github https://github.com/anatol/quarry

See also[編輯 | 編輯原始碼]