zoukankan      html  css  js  c++  java
  • Mac上使用brew另装ruby和gem的新玩法

    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

    众所周知,Mac 开机自带 ruby 环境,位于/Library/Ruby系统资源库中,通过终端执行 ruby -v可以看到 ruby 的版本号:

    % ruby -v 
    ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]
    

    不过平常我们使用 ruby 的时候不建议使用系统自带 ruby 环境,因为会对系统文件目录进行读写,试错成本太大,不适合个人学习使用。那问题来了,在这种情况下,我们如何玩转 ruby 呢?

    解决办法:使用 Homebrew 安装 ruby 。

    Homebrew 的安装复制官网提供的命令行执行即可:https://brew.sh

    使用 Homebrew 安装 ruby:

    $ brew install ruby
    

    安装成功后,发现ruby的版本还是之前系统默认的:

    % ruby -v 
    ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]
    

    不要急,这是因为系统自带的 ruby 环境级别太高,导致我们自行安装的 ruby 环境失效。

    解决方法(一)

    笔者的解决办法是找到 ruby 的安装位置,直接略过环境变量执行 ruby 命令。

    找到 Homebrew 的软件安装目录:/usr/local/Cellar/

    找到 ruby 的安装目录 /usr/local/Cellar/ruby/2.6.5

    找到 ruby 的命令目录 /usr/local/Cellar/ruby/2.6.5/bin/

    在使用自行安装的 ruby 时只需要带上目录前缀即可,示例:

    % /usr/local/Cellar/ruby/2.6.5/bin/ruby -v
    ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]
    

    使用 gem 的方式:

    % /usr/local/Cellar/ruby/2.6.5/bin/gem -v 
    3.0.6
    

    假设使用 gem 安装了如 jekyll 的软件,执行 jekyll 命令依旧无效:

    % jekyll --version                                 
    zsh: command not found: jekyll
    

    同理,只需要找到 jekyll 的命令目录,那如何找到呢?

    执行 gem env命令可以找到有效的帮助:

    % /usr/local/Cellar/ruby/2.6.5/bin/gem env        
    RubyGems Environment:
      - RUBYGEMS VERSION: 3.0.6
      - RUBY VERSION: 2.6.5 (2019-10-01 patchlevel 114) [x86_64-darwin19]
      - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/2.6.0
      - USER INSTALLATION DIRECTORY: /Users/username/.gem/ruby/2.6.0
      - RUBY EXECUTABLE: /usr/local/opt/ruby/bin/ruby
      - GIT EXECUTABLE: /usr/local/bin/git
      - EXECUTABLE DIRECTORY: /usr/local/lib/ruby/gems/2.6.0/bin
      - SPEC CACHE DIRECTORY: /Users/username/.gem/specs
      - SYSTEM CONFIGURATION DIRECTORY: /usr/local/Cellar/ruby/2.6.5/etc
      - RUBYGEMS PLATFORMS:
        - ruby
        - x86_64-darwin-19
      - GEM PATHS:
         - /usr/local/lib/ruby/gems/2.6.0
         - /Users/username/.gem/ruby/2.6.0
         - /usr/local/Cellar/ruby/2.6.5/lib/ruby/gems/2.6.0
      - GEM CONFIGURATION:
         - :update_sources => true
         - :verbose => true
         - :backtrace => false
         - :bulk_threshold => 1000
      - REMOTE SOURCES:
         - https://rubygems.org/
      - SHELL PATH:
         - /Library/apache-maven-3.6.1/bin
         - /Library/redis-5.0.5/src
         - /Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/bin
         - /usr/local/bin
         - /usr/bin
         - /bin
         - /usr/sbin
         - /sbin
         - /usr/local/MacGPG2/bin
    

    找到 gem 的执行目录即 EXECUTABLE DIRECTORY 为 :

    /usr/local/lib/ruby/gems/2.6.0/bin
    

    尝试执行 jekyll 命令:

    % /usr/local/lib/ruby/gems/2.6.0/bin/jekyll --version
    jekyll 4.0.0
    

    惊喜的发现我们已经成功的执行了命令。

    但是,如果你使用的是 jekyll 你会发现还是会有一些命令执行异常,因为这些命令的执行过程中依旧使用的环境变量里的 ruby 和 gem。

    解决方法(二)

    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

    将自行安装的 ruby 添加到环境变量中,并保证优先级大于系统自带的 ruby。

    系统的环境变量加载顺序为:

    /etc/profile
    /etc/paths 
    ~/.bash_profile 
    ~/.bash_login 
    ~/.profile 
    ~/.bashrc
    

    依次通过 cat 命令查看,找到 /etc/paths中的 /usr/bin路径中存放着系统的 ruby 命令执行程序,我们将 brew 安装的 ruby 的 bin 目录插入到/etc/paths文件的第一行:

    % cat /etc/paths
    /usr/local/opt/ruby/bin
    /usr/local/bin
    /usr/bin
    /bin
    /usr/sbin
    /sbin
    

    然后使用 source 命令使之生效:

    % source /etc/profile
    

    检验 ruby 是否切换成功:

    % ruby -v            
    ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]
    

    可以看到,ruby 环境已经切换为 brew 安装的。

    事情到这里并没有结束,还需要将 gem 安装的软件的执行目录加载到环境变量中,通过执行 gem env可以找到 EXECUTABLE DIRECTORY 目录的位置,和上面步骤相同,添加到 /etc/paths中:

    % cat /etc/paths
    /usr/local/opt/ruby/bin
    /usr/local/lib/ruby/gems/2.6.0/bin
    /usr/local/bin
    /usr/bin
    /bin
    /usr/sbin
    /sbin
    

    使用 source命令使之生效即可。

    接下来,你可以放心在自己的 Mac 上使用 ruby 和 gem 了。

    版权声明

    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

  • 相关阅读:
    京东精益敏捷教练分享:敏捷助力产品创新!
    设计规范 | 详解组件控件结构体系
    Axure响应式进阶
    通讯录表设计
    TEST1
    c#练习四单元总结
    窗体控件应用总结(1)
    .NET(c#理解)
    test2-11
    test1-1
  • 原文地址:https://www.cnblogs.com/onblog/p/13043477.html
Copyright © 2011-2022 走看看