いろいろと3時間ハマったお話(実質作業時間は30分だった?)

最近、Mojoliciousを触っています。

バグとかのお話ではないです、ただ自分が馬鹿なだけです。

結果としては、Teng様のバージョン違いを把握していなかった為でありました。

では、その3時間の経過をば、つらつらと…。

  1. ローカルで作ったプログラムが、テスト環境で動かなかった。
  2. テスト方法はTest::Mojo使ってstatusとかを見るテスト。
  3. 期待通りのstatusが返ってこない。
  4. エラーが吐かれないで処理が途中で落ちてるっぽい。(自分の書き方が雑なせいさ!!)
  5. デバッガで辿ろう>Mojo::Exceptionに辿り着く。>やっぱり途中で落ちてる。
  6. けど、何が原因で落ちてるのかわからん!!(自分がデバッガを読みきれてない…。)
  7. 疲れる。
  8. デバッガは諦めて。伝家の宝刀、二部探索!!
  9. しかし、なかなか出来ない。(printだかwarnなどなどするも出ない…。)
  10. なかなか出来ない。(2回言うけれど、自分の書き方が雑なせい!)
  11. 出来ない。(この辺、記憶が曖昧…意識が朦朧…。)
  12. ボクはここで負けるのか…負けてしまうのか…。
  13. 否!エラーをキャッチしよう!!
  14. プログラムをtry{}catch{};で全体を括る。
  15. 実行!
  16. 出来た!!と思ったらデータが多すぎて目が追うのを拒否してる(use DDP; p $e;)
  17. データを読んでも脳みそが拒否してわからない。
  18. p ref $e;してみた、"Mojo::Exception"。さっきの奴だ。
  19. Mojo::Exceptionを読む。
  20. print $e->to_string; column get が無いよ。DBでエラー的なメッセージ。

(print $eって最初からしてたらto_stringと同じだったのね、なんでもかんでもダンプする癖が仇となった…。)

  1. でもgetなんてcolumnは無い…。
  2. 該当行を見に行く。
foreach (@$rows) {
  $_->get("id");
}

的に書かれている。

  1. ん?get??がメソッド?なのにcolumn??そうか!getって書いてある所はカラム名を直接指定していいんだね!?
foreach (@$rows) {
  $_->id;
}
  1. 通ったキター!!
  2. で、なんでローカルで通ったんだろう…。
  3. Teng::Rowを調べる。
  4. ローカルのTeng::Row 0.20ではgetメソッドがあって、テスト環境のTeng::Row 0.18ではgetメソッドが無かったということでした。

(以前のバージョンからであれば、get_column("id")的に書くのがベターであったのであろう…たしか。)

という感じでハマっていました!!