memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

三単現のs

昨年、やっと完成したRailsのデバッグ支援ツール(DMSS)についてです。完成したといってもまだ不完全のためまだ実験をして改良を加えていこうという感じです。

来週からRails学習が始まりますので、今年の授業でもこのツールを使おうと準備をしてました。

1年前の自分は他人です。自分で残したメモをたどりながら何とかRender.comにデプロイして動作させるところまでは行ったのですが、なぜか模擬学生のRailsプロジェクトからデータが送信されません。。。

Render.comはフリープランを使っているので新たに作ったプロジェクトでは外部に公開されるURLが変わります。この情報をツールに反映しなければなりませんでした。

さらに、以下のバグに出会いました。

昨年までRails5(Ruby2.7.5)で授業していたのでこのシステムもこのバージョンで開発しているのですが、学生さんらのプロジェクトはRails7(Ruby3.2.2)なので、対応していかなければなりません。

エラーメッセージは以下でした。は?exists?がないだと?

monitoring.rb:114:in `get_error_code_part': undefined method `exists?' for File:Class (NoMethodError)
      return "" if not File.exists?(fname)

と思ってググったら本当に長らくdeprecatedになっていてとうとうなくなってしまったのだそうです。

Ruby 3.2 - 無くなったメソッド

なるほど「Rubyではできるだけ三単現のsは使わないように」という流儀から来ているのだそうです。知らんかった。。。ということで修正します。

はい、それだけです。

ちょい追記

もう1つバグが見つかった。

Railsのログを監視して、そのログに含まれる情報をチェックするコードの一部が以下なんですが。

    if get_lineno(arr) =~ /^\d+$/ #数字か?

この =~ というメソッドがObjectクラスから削除されたため、ここがエラーになるケースが見つかりました。もともとバグがあっただけなんですが。こんなに小さなツールでも見つかるんだから、Ruby3に変えたら色々と不具合って見つかりそうだな、と思いました。

とりあえず、get_linenoのメソッドでは必ずstringを返す(どのケースにも当てはまらなければ空文字を返す)ように変更して逃げることとしました。