• 在 M1/M2 芯片的Mac上安装最新原生 ruby 的超简单方法(无需rvm)


    在这里插入图片描述

    概览

    Mac OS 操作系统本身就内置了ruby 语言,不过有两个问题:

    1. 不是最新 ruby 版本
    2. 安装 gem 需要 root 权限(这点比较烦人)

    比如,我的M2芯片 MacBook Air 的操作系统为 macOS 12.6(Monterey),默认内置的是2.6.8版本的 ruby :

    hopy@Love2 ~ % /usr/bin/ruby -v
    ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21]

    在使用内置版本的 ruby 安装新 gem 包的时候,会要求管理员权限:

    ERROR: While executing gem … (Gem::FilePermissionError)
    You don’t have write permissions for the /Library/Ruby/Gems/2.6.8 directory.

    这多少有点让人不爽!😦

    本文将介绍如何在 macOS 中使用最新版本的 ruby,而且更赞的是:新ruby 在安装 gem 时不用再要求 root 权限了。

    虽然用 rvm 管理不同版本的 ruby 很方便,但本文采用了一个更为简便的方法:直接用 brew 安装!

    这种方法假定开发者只使用最新的 ruby,而不是随时会在不同版本的 ruby 中切换。如果大家需要时常在不同 ruby 中切换的话,还是推荐使用 rvm 安装和管理 ruby。

    废话少叙,Let‘s do it!!!😉


    下载安装最新 ruby

    Mac 中需要安装 brew,不知 brew 为何物的(这有点不大可能,毕竟小伙伴码农们都不是吃素的)请自行谷哥度娘之。

    首先,我们需要知道最新 ruby 的版本:

    hopy@Love2 ~ % brew search ruby
    ==> Formulae
    chruby                                   ruby-completion
    chruby-fish                              ruby-install
    cucumber-ruby                            ruby@2.4
    imessage-ruby                            ruby@2.5
    jruby                                    ruby@2.6
    mruby                                    ruby@2.7
    mruby-cli                                ruby@3.0
    rbenv-bundler-ruby-version               rubyfmt
    ruby                                     homebrew/portable-ruby/portable-ruby
    ruby-build
    
    ==> Casks
    rubymine                                 rubymotion
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    可以看到当前最新 ruby 的版本为3.0。

    顺便说一句该版本的ruby(3.0)是ARM架构的原生实现,即原生支持M1/M2芯片:

    在这里插入图片描述

    接着,直接执行以下命令,brew 会下载并安装最新的 ruby:

    brew install ruby@3.0
    
    • 1

    有时,由于网络的原因可能会提示下载失败,这时可以多试几次,brew是支持断点继续下载的。

    设置 ruby 运行环境

    在安装完毕后,为了使用最新下载的ruby,我们需要将其路径加入PATH:

    echo 'export PATH="/opt/homebrew/opt/ruby@3.0/bin:$PATH"' >> ~/.zshrc
    
    • 1

    上面假设小伙伴们使用的 shell 类型是Zsh,如果你的编译器需要找到最新的ruby(比如你要编写ruby 的C扩展或相反),请再导入下面两个路径:

    export LDFLAGS="-L/opt/homebrew/opt/ruby@3.0/lib"
    export CPPFLAGS="-I/opt/homebrew/opt/ruby@3.0/include"
    
    • 1
    • 2

    接着,执行如下命令以刷新当前 shell 环境:

    source ~/.zshrc
    
    • 1

    如果以上步骤都没有问题,此时 ruby 命令应该链接到最新版本的可执行文件:

    hopy@Love2 ~ % which ruby           
    /opt/homebrew/opt/ruby@3.0/bin/ruby
    
    • 1
    • 2

    Gem包安装的问题

    现在,我们在安装新 gem 包的时候,不会再需要root权限。但还有一个问题:在 shell 中会找不到新安装的包。

    比如:我们想用 pry 代替 irb 作为交互式 ruby 来使用,使用:

    gem install pry
    
    • 1

    安装 pry 之后,在shell中输入 pry 会提示找不到该命令。

    这是因为 pry 可执行文件没有加入系统的可执行路径中。

    首先,我们需要找到Gem包安装的位置,执行如下命令:

    gem environment
    
    • 1

    检查输出中 GEM PATHS 段落里的内容

    - GEM PATHS:
         - /opt/homebrew/lib/ruby/gems/3.0.0
         - /Users/你的用户名/.local/share/gem/ruby/3.0.0
         - /opt/homebrew/Cellar/ruby@3.0/3.0.4/lib/ruby/gems/3.0.0
    
    • 1
    • 2
    • 3
    • 4

    这时,第一个路径(/opt/homebrew/lib/ruby/gems/3.0.0)就是系统Gem包的根目录,可以看到 pry 就放在其中的 gems 目录中:

    hopy@Love2 ~ % cd /opt/homebrew/lib/ruby/gems/3.0.0
    hopy@Love2 3.0.0 % ls 
    bin		cache		extensions	plugins
    build_info	doc		gems		specifications
    hopy@Love2 3.0.0 % cd gems 
    hopy@Love2 gems % ls
    coderay-1.1.3		method_source-1.0.0	pry-0.14.1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    最后,将 pry 软链接至 ruby 的可执行目录中即可:

    hopy@Love2 bin % cd /opt/homebrew/opt/ruby@3.0/bin/
    hopy@Love2 bin % ln -s /opt/homebrew/lib/ruby/gems/3.0.0/gems/pry-0.14.1/bin/pry pry
    
    • 1
    • 2

    现在,新安装的 gem 包可以在shell中直接运行了,棒棒哒💯🚀

    在这里插入图片描述

    总结

    在本篇博文中,我们介绍了如何在M1/M2芯片的Mac上安装最新的ruby,并解决了新安装的gem包在shell中找不到,从而无法运行的问题。

    感谢观赏,再会!😎

  • 相关阅读:
    nextjs构建服务端渲染,同时使用Material UI进行项目配置
    Flutter-自定义可展开文本控件
    最新基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法
    基于网络爬虫的购物平台价格监测系统的设计与实现
    Scala 模式匹配和case类
    Keepalived+Nginx实现网站的高可用架构
    【SG滤波】三阶滤波、五阶滤波、七阶滤波(Matlab代码实现)
    开发者驱动的软件公司,如何赚取万亿美元?
    使用matlab辨识工具来估算震动系统的传递函数
    2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C卷
  • 原文地址:https://blog.csdn.net/mydo/article/details/126918391