在 M1 MacBook 上安装较旧的 Ruby 版本?

ort*_*doX 37 ruby homebrew rbenv asdf-vm apple-m1

rbenv使用或在 M1 MacBook 上安装 Ruby 3.0.x 可以正常工作asdf。但 2.7.x 和 2.6.x 等旧版本存在各种问题。如何在不homebrew同时安装 x86 和 ARM 版本的情况下修复它们?

ort*_*doX 63

为了使用 或 在 M1 MacBook 上成功安装 Ruby 版本 2.6.x 或 2.7.x rbenvasdf 本例中使用了 asdf)在 M1 MacBook 上成功安装 Ruby 版本 2.6.x 或 2.7.x ,请按照以下步骤操作:

使用您喜欢的安装方法升级到最新版本的rbenv插件。asdf-ruby就我而言,它是asdf-ruby通过自制软件安装的:

brew upgrade asdf
asdf plugin update ruby
Run Code Online (Sandbox Code Playgroud)

重新安装当前版本的opensslreadlineruby-build获得最新版本和配置:

brew uninstall --ignore-dependencies readline
brew uninstall --ignore-dependencies openssl
brew uninstall --ignore-dependencies ruby-build
rm -rf /opt/homebrew/etc/openssl@1.1
brew install -s readline
brew install -s openssl
brew install -s ruby-build
Run Code Online (Sandbox Code Playgroud)

在您的 shell 配置中.bashrc.zshrc添加以下 ENV 变量:

export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"
export LDFLAGS="-L/opt/homebrew/opt/readline/lib:$LDFLAGS"
export CPPFLAGS="-I/opt/homebrew/opt/readline/include:$CPPFLAGS"
export PKG_CONFIG_PATH="/opt/homebrew/opt/readline/lib/pkgconfig:$PKG_CONFIG_PATH"
export optflags="-Wno-error=implicit-function-declaration"
export LDFLAGS="-L/opt/homebrew/opt/libffi/lib:$LDFLAGS"
export CPPFLAGS="-I/opt/homebrew/opt/libffi/include:$CPPFLAGS"
export PKG_CONFIG_PATH="/opt/homebrew/opt/libffi/lib/pkgconfig:$PKG_CONFIG_PATH"
Run Code Online (Sandbox Code Playgroud)

这将确保在安装过程中使用正确的库和标头,并将忽略implicit-function-declaration阻止某些版本继续安装的库和标头。请注意,对于其他一些 shell,例如fish这些变量的导出会有点不同。

现在启动一个新的终端会话,您可以尝试安装旧的 ruby​​ 版本:

asdf install ruby 2.7.2
asdf install ruby 2.6.5
Run Code Online (Sandbox Code Playgroud)

请注意,低于 2.5 的旧版本可能仍然存在问题。大部分的功劳都归于这个 Github 问题

更新

对于 Ruby 2.2,请更改以下变量:

export RUBY_CONFIGURE_OPTS=openssl@1.0
Run Code Online (Sandbox Code Playgroud)

并做一个

asdf reshim ruby
Run Code Online (Sandbox Code Playgroud)

感谢@xjlin0 的更新

  • 我有一个遗留项目仍在与 2.4 一起进展,并且您的建议在我的测试中发挥了作用。谢谢! (5认同)
  • 使用这些说明卸载并重新安装 OpenSSL 会提升我的 ruby​​gems 和 npm 注册表功能,并且我必须手动安装 CA 证书。 (5认同)
  • 这不适用于 BUILD FAILED(使用 ruby​​-build 20220910.1 的 macOS 12.6) (4认同)
  • 我确认它适用于 asdf 但不适用于 rbenv 执行了相同的步骤 (3认同)
  • 对于 2.2 https://github.com/rbenv/ruby-build/issues/1742#issuecomment-835790760 加上将 RUBY_CONFIGURE_OPTS 设置为 openssl@1.0 和 `asdf reshim ruby​​` (2认同)

小智 14

这个简单的命令帮助了我

RUBY_CFLAGS="-w" rbenv install 2.5.5
Run Code Online (Sandbox Code Playgroud)

  • 哇,从 1 月 23 日起,这确实有效,不像接受的版本,这也需要更多的工作 (2认同)