rbenv 和苹果 m1。安装 ruby 3.2、2.7 和 2.6 失败

问题描述 投票:0回答:2

我无法使用 rbenv 安装任何 ruby 版本。我尝试过 2.6.10 2.7.7 或 3.2.0 .

这是我执行时遇到的错误:

❯ rbenv install 3.2.0
To follow progress, use 'tail -f /var/folders/4v/kyv3nw1s7lq8s7lz7r6djvsr0000gn/T/ruby-build.20230125170342.85553.log' or pass --verbose
Downloading openssl-3.0.7.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/83049d042a260e696f62406ac5c08bf706fd84383f945cf21bd61e9ed95c396e
Installing openssl-3.0.7...
Installed openssl-3.0.7 to /Users/idanahal/.rbenv/versions/3.2.0

Downloading ruby-3.2.0.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0.tar.gz
Installing ruby-3.2.0...
ruby-build: using readline from homebrew
ruby-build: using gmp from homebrew

BUILD FAILED (macOS 13.1 using ruby-build 20221225)

Inspect or clean up the working tree at /var/folders/4v/kyv3nw1s7lq8s7lz7r6djvsr0000gn/T/ruby-build.20230125170342.85553.VSOgmw
Results logged to /var/folders/4v/kyv3nw1s7lq8s7lz7r6djvsr0000gn/T/ruby-build.20230125170342.85553.log

Last 10 log lines:
compiling ossl_x509ext.c
compiling ossl_x509name.c
compiling ossl_x509req.c
compiling ossl_x509revoked.c
compiling ossl_x509store.c
installing default openssl libraries
linking shared-object date_core.bundle
linking shared-object openssl.bundle
linking shared-object ripper.bundle
make: *** [build-ext] Error 2

使用 Homebrew 安装时它可以工作。我不知道该怎么办。 rbenv 是否应该与 m1 计算机一起使用?

我有 MacOS 13.1

ruby rbenv ruby-3
2个回答
9
投票

设置如下环境变量即可解决问题:

export RUBY_CONFIGURE_OPTS="--with-zlib-dir=$(brew --prefix zlib) --with-openssl-dir=$(brew --prefix [email protected]) --with-readline-dir=$(brew --prefix readline) --with-libyaml-dir=$(brew --prefix libyaml) --with-gdbm-dir=$(brew --prefix gdbm)"

在所有版本运行

rbenv install
之前。

注意:仅

--with-openssl-dir=$(brew --prefix [email protected])
2.6.*
版本需要配置
2.7.*
。如果您尝试安装 ruby,您可以(并且应该)删除它
3.*.*

对于 2.6 和 2.7 有时还需要此环境变量:

export RUBY_CFLAGS="-Wno-error=implicit-function-declaration"

如果以上方法都不起作用,您可以使用 Homebrew 安装 ruby。 如果您想从 rbenv 管理 Homebrew 安装版本,请阅读此答案


0
投票

根据这篇博文,您需要指定您的 Ruby 版本所需的 OpenSSL 版本的路径:

Ruby 3.1 及更高版本,使用:

RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)" rbenv install 3.1.0
Ruby 2.4 至 3.0,使用:

RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix [email protected])" rbenv install 2.4.0
Ruby 2.3 及更早版本,使用

RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1)" rbenv install 2.3.0
但是有一个

重要的安全考虑!OpenSSL 版本 1 多年前已被弃用。这意味着 Ruby 2.3 及更早版本已经很长时间没有获得 OpenSSL 安全更新了。 OpenSSL 1.1 版本也在 2023 年底停止获取安全更新,这意味着 3.1 之前的所有 Ruby 都可能不安全。

以上假设您已经通过 Homebrew 安装了 OpenSSL。这就是

$(brew ...)

 部分的含义——它填写 Homebrew 安装 OpenSSL 的路径。如果您没有使用 Homebrew 安装它,则需要将 
--with-openssl-dir
 设置为等于安装 OpenSSL 的任何路径。

注意: 在您发布的终端输出中,您将看到类似 Results logged to /path/name/file.log

 的消息。如果您从此文件中添加错误,这将对您的问题有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.