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



安装Ruby 3.0。x在使用rbenvasdf的M1 macbook上运行良好。但是像2.7这样的旧版本。X和2.6。X有各种各样的问题。我如何修复它们,而不同时安装x86和ARM版本的homebrew?

为了安装2.6版本的Ruby。X或2.7。在M1 MacBook上使用rbenvasdf(本例中使用asdf)执行以下步骤:

使用您喜欢的安装方法升级到最新版本的rbenvasdf-ruby插件。在我的情况下,它是asdf-ruby安装在homebrew:

brew upgrade asdf
asdf plugin update ruby

重新安装openssl,readlineruby-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"

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

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

asdf install ruby 2.7.2
asdf install ruby 2.6.5

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

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

export RUBY_CONFIGURE_OPTS=openssl@1.0

And do a

asdf reshim ruby

感谢@xjlin0提供此更新

这个简单的命令帮助了我

RUBY_CFLAGS="-w" rbenv install 2.5.5

面对M2 Pro的错误,Ventura 13.4.1

Error running '__rvm_make -j12',
please read /Users/mkrasikov/.rvm/log/1688468004_ruby-2.7.4/make.log
There has been an error while running make. Halting the installation.

解决:

brew install rbenv
RUBY_CFLAGS="-w" rbenv install 2.7.4

我在Ruby 2.2.2中遇到过同样的问题,许多gem都依赖于它。所以我已经为ubuntu 18.04创建了一个docker容器,然后在上面安装了ruby。这是工作。

对于M1 Macbook Pro 2021上的OSX v12.6.1,我在~/中使用了以下导出。使用brew安装ruby-build后,Bash_profile文件成功构建ruby 2.6.5

export optflags="-Wno-error=implicit-function-declaration"
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)"
export LDFLAGS="-L/opt/homebrew/opt/readline/lib -L/opt/homebrew/opt/openssl@3/lib"
export CPPFLAGS="-I/opt/homebrew/opt/readline/include -I/opt/homebrew/opt/openssl@3/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/readline/lib/pkgconfig /opt/homebrew/opt/openssl@3/pkgconfig"

这个问题已经在ruby 2.7.10及以后的版本中得到解决。如果您使用的是版本管理器,比如asdf,那么这个问题应该在完整的2.7版本中得到解决。X版本范围(不只是2.7.10)

潜在的问题是Xcode 14引入的不兼容性。一个解决方案是降级到Xcode 13,这样你就可以构建ruby了。对于许多用户来说,这不是一个可行的路径,所以另一个选择是为您的架构获取一个已经构建的ruby版本,这可以从homebrew下载。

Homebrew有一个ruby@2.6的公式,它将运行在MacOS M1 (arm)和旧的基于intel的模型(x86)上。你可以用brew install ruby@2.6将安装ruby 2.6.10。如果你只需要这些,你可以停在这里。

如果你想在版本管理器(如asdf)中使用ruby 2.6,你可以这样做:

brew install ruby@2.6
ln -s $(brew --prefix ruby@2.6) ~/.asdf/installs/ruby/2.6.10
asdf reshim ruby 2.6.10

thanks to @orthodox

与rosetta I有brew在arm64下。所以我卸载了它,并重新安装了x86和工作

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/usr/local/bin/brew shellenv)"' >> /Users/mberrueta/.zprofile
eval "$(/usr/local/bin/brew shellenv)"
arch -x86_64 brew uninstall --ignore-dependencies   asdf
arch -x86_64 brew install asdf
arch -x86_64 brew upgrade asdf
asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git
asdf plugin update ruby

arch -x86_64 brew uninstall --ignore-dependencies --force openssl
arch -x86_64 brew uninstall --ignore-dependencies  --force ruby-build
rm -rf /opt/homebrew/etc/openssl@1.1
arch -x86_64 brew install -s readline
arch -x86_64 brew install -s openssl
arch -x86_64 brew install -s ruby-build

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"
asdf install ruby 2.6.9

最新更新