【问题标题】:Install older Ruby versions on a M1 MacBook?在 M1 MacBook 上安装旧 Ruby 版本?
【发布时间】:2021-10-30 21:24:15
【问题描述】:

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

【问题讨论】:

    标签: ruby homebrew rbenv apple-m1 asdf-vm


    【解决方案1】:

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

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

    brew upgrade asdf
    asdf plugin update ruby
    

    重新安装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
    

    在您的 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。请注意,对于像 fish 这样的其他一些 shell,这些变量的导出会有些不同。

    现在开始一个新的终端会话,您可以尝试安装旧的 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 更新

    【讨论】:

    • 我有一个遗留项目仍在推进 2.4,您的建议在我的测试中有效。谢谢!
    • 不客气@Yoopergeek!
    • 我当时应该提到它,因为它可能对其他人有帮助 - 我使用的是 rbenv,它是用于我的测试的 ruby​​-build。
    • 我确认它适用于 asdf 但不是 rbenv 做了相同的步骤
    • 对于 2.2 github.com/rbenv/ruby-build/issues/1742#issuecomment-835790760 加上将 RUBY_CONFIGURE_OPTS 设置为 openssl@1.0 和 asdf reshim ruby
    【解决方案2】:

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

    【讨论】:

    • 是的,我更喜欢将我的开发设置也用于所有项目。但我确实在本地安装了我使用的语言,以便编辑使用的 linting 和格式化。在容器本身中使用 lint/format 是可行的,但对于许多编辑器来说,体验仍然不是那么好,也很容易设置。这就是为什么我只保留本地安装的 Ruby/Elixir 版本,而我使用的所有其他服务都严格来自 Docker,例如 Posgres、Redis 等。
    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 2022-11-11
    • 2023-02-20
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多