Ruby3.2でCompass1.0.3は動かせないっぽい


現在時点(2023/2/9時点)で最新のrubycompassをインストールしてcompass watchしたところ、rubyのエラーが発生してscssのコンパイルができなかったので、その件についての事象と解決策を記します。




使用していたrubyとcompassのバージョン

ruby 3.2.0
Compass 1.0.3

rubyはこちらのサイトから現在時点で最新の3.2.0をインストールしました。
compassは gem update –system → gem install compassで落としバージョンは1.0.3でした。




起きていた事象

上記の手順でrubyとcompassをインストールし、compass watchコマンドを打ったところ、下記のようなエラーが出ました。
どうやら、Fileクラスにexistsメソッドは存在しないよ、と言っているようです。

NoMethodError on line ["89"] of C: undefined method `exists?' for File:Class




エラーはどこで起きているのか

–traceオプションを付けることで、詳しいエラー箇所が見れるようなので、compass watch –trace とコマンドを打つと、1行目に下記のような記述がありました。どうやら/compass-1.0.3/lib/compass/configuration/helpers.phpというファイルの89行目で事は起きているようです。

C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/compass-1.0.3/lib/compass/configuration/helpers.rb:89




connaiconnai

指摘されている箇所を見てみる

上記で指摘された/compass-1.0.3/lib/compass/configuration/helpers.phpの89行目を見てみると、確かにFileクラスのexistsメソッドを使おうとしている記述が見つかりました。この1行上にexitと書き処理を止めてみると確かにエラーは起きませんでしたので、確かにこのFile.existsがどうやら悪さしているようです。




なぜFile.existsがエラーになっているのか

下記の記事に教えてもらったのですが、どうやらFile.existsはRuby2.1で非推奨となり、Ruby3.2でとうとう廃止されてしまったようです。
Ruby 3.2 – 無くなったメソッド

Ruby側で廃止されたメソッドをcompassモジュールが使おうとしてエラーが出ていたというのが事の顛末のようです。




解決策

問題のFile.existsはRuby3.2から廃止されたという事でしたので、3.2はアンインストールして一つ前のバージョンの3.1.3を入れてみました。

すると、何事もなかったかのようにcompass watchが通りました。





以上、Ruby3.2でCompass1.0.3で動かない件の事象と解決策を記しました。
参考になれば幸いです!

コメント

タイトルとURLをコピーしました