ruby-build 是一個命令列工具,可以簡化在類別 Unix 系統上從原始程式碼安裝任何 Ruby 版本的過程。
它可以作為rbenv install
指令的 rbenv 外掛程式使用,也可以作為ruby-build
指令作為獨立程式使用。
brew install ruby-build
升級:
brew upgrade ruby-build
git clone https://github.com/rbenv/ruby-build.git " $( rbenv root ) " /plugins/ruby-build
升級:
git -C " $( rbenv root ) " /plugins/ruby-build pull
首先,從 https://github.com/rbenv/ruby-build/releases/latest 下載 tarball。然後:
tar -xzf ruby-build- * .tar.gz
PREFIX=/usr/local ./ruby-build- * /install.sh
# As a standalone program
$ ruby-build --list # lists latest stable releases for each Ruby
$ ruby-build --definitions # lists all definitions, including outdated ones
$ ruby-build 3.2.2 ~ /.rubies/ruby-3.2.2 # installs Ruby 3.2.2
$ ruby-build -d ruby-3.2.2 ~ /.rubies # alternate form for the previous example
# As an rbenv plugin
$ rbenv install 3.2.2 # installs Ruby 3.2.2 to ~/.rbenv/versions/3.2.2
警告
在下載並嘗試從原始程式碼編譯 Ruby 之前,ruby-build 通常不會驗證系統依賴項是否存在。請確保您的系統上已存在所有必需的程式庫,例如建置工具和開發標頭。
基本上,ruby-build 在安裝 Ruby 版本時會執行以下操作:
./configure --prefix=/path/to/destination
;make install
來編譯 Ruby;根據上下文,ruby-build 的作用比上面的更多:例如,它會嘗試將 Ruby 連結到適當的 OpenSSL 版本,即使這意味著下載並編譯 OpenSSL 本身;它將發現並連結到一些庫(如 libyaml 和 readline 等)的 Homebrew 安裝實例。
若要安裝 ruby-build 無法辨識的 Ruby 版本,您可以指定自訂建置訂檔的路徑來取代 Ruby 版本號。
查看預設建置定義作為如何編寫定義檔的範例。
建置過程可以透過以下環境變數進行配置:
多變的 | 功能 |
---|---|
TMPDIR | 臨時檔案存儲的位置。 |
RUBY_BUILD_BUILD_PATH | 下載和建置原始程式碼的地方。 (預設: TMPDIR 的帶時間戳記的子目錄) |
RUBY_BUILD_CACHE_PATH | 快取下載的包檔案的位置。 (預設值:如果以 rbenv 外掛程式調用, ~/.rbenv/cache ) |
RUBY_BUILD_HTTP_CLIENT | 用於下載的aria2c 、 curl 或wget 之一。 (預設值:在 PATH 中找到的第一個) |
RUBY_BUILD_ARIA2_OPTS | 傳遞給aria2c 進行下載的其他選項。 |
RUBY_BUILD_CURL_OPTS | 傳遞給curl 進行下載的附加選項。 |
RUBY_BUILD_WGET_OPTS | 傳遞給wget 進行下載的其他選項。 |
RUBY_BUILD_MIRROR_URL | 自訂鏡像 URL 根。 |
RUBY_BUILD_MIRROR_PACKAGE_URL | 自訂完整鏡像 URL(例如 http://mirror.example.com/package-1.0.0.tar.gz)。 |
RUBY_BUILD_SKIP_MIRROR | 繞過下載鏡像並從原始 URL 取得所有套件檔案。 |
RUBY_BUILD_TARBALL_OVERRIDE | 覆蓋 URL 以從中獲取 ruby tarball,可選地後面跟著#checksum 。 |
RUBY_BUILD_DEFINITIONS | 用於搜尋建置定義檔的以冒號分隔的路徑清單。 |
RUBY_BUILD_ROOT | 用於搜尋建置定義檔的路徑前綴。已棄用:使用RUBY_BUILD_DEFINITIONS |
RUBY_BUILD_VENDOR_OPENSSL | 建置和供應商 openssl,即使系統 openssl 相容 |
CC | C 編譯器的路徑。 |
RUBY_CFLAGS | 其他CFLAGS 選項(例如,覆蓋-O3 )。 |
CONFIGURE_OPTS | 附加./configure 選項。 |
MAKE | 自訂make 指令(例如gmake )。 |
MAKE_OPTS / MAKEOPTS | 附加make 選項。 |
MAKE_INSTALL_OPTS | 附加的make install 選項。 |
RUBY_CONFIGURE_OPTS | 其他./configure 選項(僅適用於 Ruby 來源)。 |
RUBY_MAKE_OPTS | 其他make 選項(僅適用於 Ruby 來源)。 |
RUBY_MAKE_INSTALL_OPTS | 其他make install 選項(僅適用於 Ruby 來源)。 |
NO_COLOR | 在輸出中停用 ANSI 顏色。預設情況下,連接到終端的輸出使用顏色。 |
CLICOLOR_FORCE | 即使未連接到終端,也可在輸出中使用 ANSI 顏色。 |
rbenv install
和ruby-build
命令都支援-p/--patch
標誌,以便在建置之前將補丁應用於 Ruby 原始程式碼。補丁是從標準輸入讀取的:
# applying a single patch
$ rbenv install --patch 1.9.3-p429 < /path/to/ruby.patch
# applying a patch from HTTP
$ rbenv install --patch 1.9.3-p429 < <( curl -sSL http://git.io/ruby.patch )
# applying multiple patches
$ cat fix1.patch fix2.patch | rbenv install --patch 1.9.3-p429
與 ruby-build 捆綁在一起的所有 Ruby 定義檔都包含套件的校驗和,這意味著所有外部下載的套件在獲取後都會自動檢查完整性。
有關如何編寫校驗和的更多信息,請參閱下一節。
為了加快下載速度,ruby-build 從 Amazon CloudFront 上託管的鏡像中取得套件檔案。為了從中受益,包必須指定它們的校驗和:
# example:
install_package " ruby-2.6.5 " " https://ruby-lang.org/ruby-2.6.5.tgz# "
ruby-build 將首先嘗試從$RUBY_BUILD_MIRROR_URL/
取得此套件(注意:這是完整的 URL),其中
是檔案的校驗和。如果出現以下情況,它將回退到從原始位置下載軟體包:
RUBY_BUILD_SKIP_MIRROR
已啟用。您可以透過設定RUBY_BUILD_MIRROR_URL
來指定自訂鏡像。
如果鏡像網站不符合上述 URL 格式,您可以透過設定RUBY_BUILD_MIRROR_PACKAGE_URL
來指定完整的 URL。它的行為與RUBY_BUILD_MIRROR_URL
相同,但它是一個完整的 URL。
預設的 ruby-build 下載鏡像由 Basecamp 贊助。
ruby-build
和rbenv install
都接受-k
或--keep
標誌,該標誌告訴 ruby-build 在安裝後保留下載的源代碼。如果您需要將gdb
和memprof
與 Ruby 結合使用,這會很有用。
當使用--keep
和rbenv install
指令時,原始碼將保存在平行目錄樹~/.rbenv/sources
中。將--keep
與ruby-build
一起使用時,您應該使用RUBY_BUILD_BUILD_PATH
環境變數指定原始程式碼的位置。
請參閱 ruby-build wiki 以取得常見問題的解決方案。
如果您在 wiki 上找不到答案,請在問題追蹤器上開啟問題。請務必包含建置失敗的完整建置日誌。