前言 (其實本文在介紹 RVM)
由於我們開發 WebApp 會在 Linux 持續整合 (Continuous Integration) 系統中進行每日建置 (Nightly Build) 工作,持續整合可以參考這一篇文章介紹。最近導入 SASS 來重構整個 CSS 的程式碼,不然 CSS 太肥很難維護。在 Windows 進行 SASS 編譯沒有問題(透過 compass),但是在持續整合 Linux CentOS 上卻出現「regexp buffer overflow」的錯誤,GG 畫面如下:
[INF] -compass-compile-sass-dir: [INF] executing compass using system installed ruby runtime StringScanner::Error on line 906 of /usr/bin/Sencha/Cmd/4.0.2.67/extensions/sencha-compass/gems/gems/sass-3.1.7/lib/sass/../sass/scss/parser.rb: regexp buffer overflow /usr/bin/Sencha/Cmd/4.0.2.67/extensions/sencha-compass/gems/gems/sass-3.1.7/lib/sass/../sass/scss/parser.rb:906:in `tok' /usr/bin/Sencha/Cmd/4.0.2.67/extensions/sencha-compass/gems/gems/sass-3.1.7/lib/sass/../sass/scss/parser.rb:424:in `selector_sequence' /usr/bin/Sencha/Cmd/4.0.2.67/extensions/sencha-compass/gems/gems/sass-3.1.7/lib/sass/../sass/scss/parser.rb:354:in `ruleset' /usr/bin/Sencha/Cmd/4.0.2.67/extensions/sencha-compass/gems/gems/sass-3.1.7/lib/sass/../sass/scss/parser.rb:379:in `block_child' /usr/bin/Sencha/Cmd/4.0.2.67/extensions/sencha-compass/gems/gems/sass-3.1.7/lib/sass/../sass/scss/parser.rb:372:in `block_contents' /usr/bin/Sencha/Cmd/4.0.2.67/extensions/sencha-compass/gems/gems/sass-3.1.7/lib/sass/../sass/scss/parser.rb:57:in `stylesheet' /usr/bin/Sencha/Cmd/4.0.2.67/extensions/sencha-compass/gems/gems/sass-3.1.7/lib/sass/../sass/scss/parser.rb:26:in `parse' /usr/bin/Sencha/Cmd/4.0.2.67/extensions/sencha-compass/gems/gems/sass-3.1.7/lib/sass/../sass/engine.rb:320:in `_to_tree' /usr/bin/Sencha/Cmd/4.0.2.67/extensions/sencha-compass/gems/gems/sass-3.1.7/lib/sass/../sass/engine.rb:252:in `to_tree'
由於我在 Windows 環境是跑 Ruby 2.0.0,因此想說先升級 CentOS Ruby 的版本來試看看。Google 了一些資料,似乎現在用 RVM (Ruby Version Manager) 管理 Ruby 比較炫,而且可以同時安裝很多版本的 Ruby。因此最後我決定採用 RVM 的方式進行 Ruby 升級,有興趣的請繼續看下去。
安裝 RVM
安裝 RVM,方法如下:
先用 yum 安裝需要的套件
[root@linux ~]# yum install gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel
安裝 RVM
[root@linux ~]# curl -L get.rvm.io | bash -s stable
設定 RVM 環境
[root@linux ~]# source /etc/profile.d/rvm.sh
透過 RVM 安裝 Ruby 2.1.0
[root@linux ~]# rvm install 2.1.0
如果運氣好的話應該可以看到跟我一樣的畫面,如下:
設定預設的 ruby 版本,順便查一下是否成功
[root@linux ~]# rvm use 2.1.0 --default Using /usr/local/rvm/gems/ruby-2.1.0 [root@linux ~]# ruby -v ruby 2.1.0p0 (2013-12-25 revision 44422) [i686-linux]
最後當然要重新執行 Sencha CMD 看看,我很幸運成功編譯 SASS,Good Luck!
小結
這幾年 Programming/Scripting Lanuage 發展的很快,很多套件管理工具一直進步,以前搞個 Ruby 都很灰心,這次用 RVM 感覺輕鬆多了,就像 PHP 由 pear 換到 composer 的感覺一樣清新,考試都一百分了!