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 上找不到答案,请在问题跟踪器上打开问题。请务必包含构建失败的完整构建日志。