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

最新文章

  1. 在一个aspx或ashx页面里进行多次ajax调用
  2. Maven私有仓库搭建和使用
  3. 对类型“ImgProWPF.MainWindow”的构造函数执行符合指定的绑定约束的调用时引发了异常。
  4. html5遵循的5个设计原则
  5. atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7
  6. 正确理解静态Static关键字
  7. Bootstrap:弹出框和提示框效果以及代码展示
  8. kettle菜鸟学习笔记3----kettle数据库连接错误及解决
  9. Linux学习之CentOS6下Mysql数据库的安装与配置
  10. javaee学习-Cookie使用范例
  11. SpringMVC实现注解式权限验证(转)
  12. Markdown引用本地图片语法
  13. android学习9——Handler简单用法
  14. 关于ARC的介绍和ARC与MRC混编解决
  15. Adobe Premiere Pro生成峰值文件假死
  16. 剑指offer(34)第一个只出现一次的字符
  17. memset()函数用法及其作用
  18. [BZOJ2687]交与并[决策单调性]
  19. IOS开发之UIScrollVIew运用
  20. Linux下的/proc目录介绍

热门文章

  1. [安卓自动化测试] 001.UIAutomator初探
  2. N3飞控踩坑指南
  3. 12 . Python3之网络编程
  4. JavaScript (五) js的基本语法 - - - 面向对象、工程模式、内置对象、JSON
  5. Java实现Fibonacci取余
  6. Java实现二进制幂
  7. java实现哈密顿回路问题
  8. 滴滴HBase大版本滚动升级之旅
  9. Html/css 水平布局居中
  10. Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)