CentOS 6.10環境のRailsプログラムをひさびさに更新しようとしたところ、sasscのlibsass.soをビルドする際に、盛大にエラーが発生していることが気がつきました。
一部抜粋すると以下のような感じです。
01 In file included from src/ast.cpp:2: 01 src/ast.hpp: In member function ‘virtual size_t Sass::Vectorized<T>::hash()’: 01 src/ast.hpp:336: error: expected initializer before ‘:’ token 01 src/ast.hpp:339: error: expected primary-expression before ‘}’ token 01 src/ast.hpp:339: error: expected ‘;’ before ‘}’ token 01 src/ast.hpp:339: error: expected primary-expression before ‘}’ token 01 src/ast.hpp:339: error: expected ‘)’ before ‘}’ token 01 src/ast.hpp:339: error: expected primary-expression before ‘}’ token 01 src/ast.hpp:339: error: expected ‘;’ before ‘}’ token
インターネットで調べてみると、CentOS 6のgccのバージョンが古すぎるせいでsasscがコンパイルできないのが原因らしく、無理矢理外gccをバージョンアップすることでコンパイルできるらしいのですが、あまり環境に手を加えることはしたくありません。
ということで別の方法で問題を解決することにしました。
font-awesome-sassを古くする
そもそもsasscが何に使われているのかを調べて見たところ、問題のプロジェクトでは「font-awesome-sass」が依存している模様です。ということで公式リポジトリに以下のような情報を発見。
Gemfileで次のように指定すれば問題が解決するようです。
gem "font-awesome-sass", "< 5.0.13"
実際に確認してみたところこの設定で問題なくインストールできました。今回はfont-awesome-sassでしたが、sasscに依存しているGemは他にも存在すると思います。同じようなコンパイルエラーが発生した場合、Gemを古いバージョンで固定すると問題が解決する可能性がありそうです。
なおfont-awesome-sassの問題はCDNを利用する方法でも解決できるかもしれまえん。