生産にこだわった愚かな虫


それで、これは起こったことです.
私はいくつかのタスクの途中で、突然私は以前プッシュした別のタスクにコンテキストスイッチを作成する必要がありました.私は失敗のケースを処理するのを忘れました、そして、コードはすでに生産に行きました.しかし、変更はかなり簡単だった.
これに似た既存のコードに条件を追加しなければなりませんでした.
Good code
これは私が追加しなければならない条件であると考えてください.
Buggy code
これを行うと、私は、私はプッシュする前に、このテストをする必要があります自分自身に尋ねたと私の天才は、これは単純な変更であったと答え、私はテストなしで進むことができる.私はまた、任意の構文エラーから私を保存するためにこれを持っていた.だから、私はかなり覆われていたし、行って良い感じ.
私はそれをプッシュし、事前にコミットフックが渡され、prodに出荷されて🚀 そして、私は他の仕事に戻りました.
数分以内に、我々のエラー監視ツールはさらに多くのエラーを示し始めました、この時、リクエストの100 %は以前に失敗していた無視できる1 %の要求と比較して失敗していました.
何が既に間違っていた可能性が推測?あなたへの功績.👏
そうでなければ、ここで見つけるのに役立つエラーです.
TypeError (class or module required)
あなたが考えるならばMyObject はクラスまたはモジュールではありません.コードのその部分が生産ですでにあったので、そして、構文上の罰金です.
それで、何が間違っていたかもしれませんか?もう一度それを調べる瞬間を与えてください.
さて、ここでは、実行優先順位についてRubyを明示的に教えませんでしたMyObject && (self.some_validation? || self.other_validation?) メソッドの引数としてself.is_a? .
だからMyObject && (self.some_validation? || self.other_validation?)? のいずれかです.
MyObject && true #true
MyObject && false #false
その結果、self.is_a? は現在booleanです.
self.is_a? true
エラーをスローします** TypeError ( class or module )**
修正プログラムはかなり簡単ですが、ちょうどRubyを実行の優先順位を知っているようにブラケットを追加します.
Fix for the bug
これらのような日が発生するバインドされ、それだけで謙虚になり、言語のニュアンスを学ぶことができます.