在 M1 MacBook 上安装旧 Ruby 版本?
Install older Ruby versions on a M1 MacBook?
安装 Ruby 3.0.x 在使用 rbenv
或 asdf
的 M1 MacBook 上运行良好。但是 2.7.x 和 2.6.x 等旧版本存在各种问题。如何修复它们,而不同时安装 homebrew
的 x86 和 ARM 版本?
为了使用 rbenv
或 asdf
在 M1 MacBook 上成功安装 Ruby 版本 2.6.x 或 2.7.x (本例使用asdf)按照以下步骤操作:
使用您喜欢的安装方法升级到最新版本的 rbenv
或 asdf-ruby
插件。在我的例子中,它是 asdf-ruby
安装在自制软件上的:
brew upgrade asdf
asdf plugin update ruby
重新安装 openssl
、readline
和 ruby-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
在您的 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"
这将确保在安装过程中使用正确的库和 headers,并且它会忽略阻止某些版本继续安装的 implicit-function-declaration
。请注意,对于其他一些 shell,例如 fish
,这些变量的导出会有些不同。
现在启动一个新的终端session,你可以尝试安装旧的ruby版本:
asdf install ruby 2.7.2
asdf install ruby 2.6.5
请注意,低于 2.5 的旧版本可能仍有问题。大部分学分归于 this Github issue.
更新
对于Ruby 2.2,请更改以下变量:
export RUBY_CONFIGURE_OPTS=openssl@1.0
然后做一个
asdf reshim ruby
感谢@xjlin0 的更新
我在 Ruby 2.2.2 中遇到了同样的问题,许多 gem 都依赖于此。所以我为 ubuntu 18.04 创建了一个 docker 容器,然后在上面安装了 ruby。有效。
安装 Ruby 3.0.x 在使用 rbenv
或 asdf
的 M1 MacBook 上运行良好。但是 2.7.x 和 2.6.x 等旧版本存在各种问题。如何修复它们,而不同时安装 homebrew
的 x86 和 ARM 版本?
为了使用 rbenv
或 asdf
在 M1 MacBook 上成功安装 Ruby 版本 2.6.x 或 2.7.x (本例使用asdf)按照以下步骤操作:
使用您喜欢的安装方法升级到最新版本的 rbenv
或 asdf-ruby
插件。在我的例子中,它是 asdf-ruby
安装在自制软件上的:
brew upgrade asdf
asdf plugin update ruby
重新安装 openssl
、readline
和 ruby-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
在您的 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"
这将确保在安装过程中使用正确的库和 headers,并且它会忽略阻止某些版本继续安装的 implicit-function-declaration
。请注意,对于其他一些 shell,例如 fish
,这些变量的导出会有些不同。
现在启动一个新的终端session,你可以尝试安装旧的ruby版本:
asdf install ruby 2.7.2
asdf install ruby 2.6.5
请注意,低于 2.5 的旧版本可能仍有问题。大部分学分归于 this Github issue.
更新
对于Ruby 2.2,请更改以下变量:
export RUBY_CONFIGURE_OPTS=openssl@1.0
然后做一个
asdf reshim ruby
感谢@xjlin0 的更新
我在 Ruby 2.2.2 中遇到了同样的问题,许多 gem 都依赖于此。所以我为 ubuntu 18.04 创建了一个 docker 容器,然后在上面安装了 ruby。有效。