Mac OS系统下配置ruby及安装sass问题总结

2019-06-11

前情提要

公司特别老的项目正在做重构,但是架不住产品提需求,所以硬着头皮就改了好几年没动过的老代码。改起来感觉还不错,没出啥乱子,但是吧,这个不符合事物发展的规律…果然,到了打包生产环境的静态资源文件的时候就出错了😢。编写样式时用Sass预处理,因此打包的时候需要转为浏览器能够理解的css文件。打包工具采用grunt,开发系统是Mac OS。郁闷啊,需要预装ruby和sass的环境才能运行。掉坑里爬了两天才出坑,今天逞着等后段出接口文档的空档,赶紧写下来记录一下,也算是这坑没有白踩了😄

brew安装ruby

啥是brew?我没有咋安装?戳我戳我(●’◡’●)

Linux和OS系统自带了ruby

> ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin16]

但是如果你直接使用gem(RubyGems是Ruby的一个包管理器)会报错

> gem install sass
ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.

尝试一下sudo命令

> sudo gem install sass
Building native extensions.  This could take a while...
  ERROR:  Error installing sass: 
  ERROR: Failed to build gem native extension.

current directory: /Library/Ruby/Gems/2.3.0/gems/ffi-1.11.1/ext/ffi_c
...
...

截取了核心的错误提示。也就是错误提示里面:
current directory: /Library/Ruby/Gems/2.3.0/gems/ffi-1.11.1/ext/ffi_c
当然也可以设置写权限,使用系统自带ruby。但是存在破坏系统环境的危险而且不必要,我们完全可以安装一个Local环境用于开发(和造作)。所以我们使用brew安装ruby。

> brew search ruby
==> Formulae
chruby  jruby rbenv-bundler-ruby-version  ruby-completion   
ruby@2.4  chruby-fish mruby ruby ✔  ruby-install  ruby@2.5
...
...

如果你的ruby这里有一个小✔那表示你其实已经成功安装了ruby那么就不需要执行接下来的install命令,如果没有✔那么赶紧执行install还等什么!

> brew install ruby

如果你想要重现安装ruby,那么可以使用reinstall命令

> brew reinstall ruby

配置PATH

安装好了看看提示,其实提示已经非常清楚了,但是我一开始安装成功后没认真看提示,又兜兜转转一大圈终于回到这里,然后真的是欲哭无泪😣以后真的要认真看提示了,可能就是出坑的光明大道。

...

By default, binaries installed by gem will be placed into:
    /usr/local/lib/ruby/gems/2.6.0/bin

You may want to add this to your PATH.

ruby is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and 
installing another version in parallel can cause all kinds of trouble.

If you need to have ruby first in your PATH run:
    echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc

...

关键句子在这:
If you need to have ruby first in your PATH run:
echo ‘export PATH=”/usr/local/opt/ruby/bin:$PATH”‘ >> ~/.zshrc
如果安装了zsh的小伙伴可以按照这个配置到.zshrc文件里面,但是我们还有一个通用的配置方法,接着看。

> echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

这个是我们的环境变量,每个path通过一个:分隔。
这个环境变量保存在什么文件里面呢?在/etc/paths里面。那我们可以将刚刚的ruby访问路径配置到这个文件里面,就可以成功访问本地ruby而非系统ruby啦~
但是注意⚠️这里还有一个小坑。路径的读取是从上往下(从前往后),所以我们要把本地ruby的访问路径配置到系统ruby的访问路径前面,才能正确访问我们的本地ruby。好啦好啦,接下来跟着做。

> sudo vi /etc/paths

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
~
~

我们使用了vim打开这个文件,再按一下 i 代表insert,就可以插入我们的新路径啦~
插入新路径后,变成了这样⬇️

/usr/local/opt/ruby/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

好啦~重启命令行吧~然后再试试

> ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin16]

> echo $PATH
/usr/local/opt/ruby/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

wow!~ ruby的版本号变了!PATH也更新啦~

安装sass

终于啊终于!我们可以安装sass啦!废话少说,敲代码!

> gem install sass
...
Successfully installed sass-3.7.4
...

sass安装成功啦!~~


呼呼呼~
好久没写文章啦,在此献上一篇踩坑泪文。希望以后的自己能够认真看提示👀