2009年11月1日 2コメント

悲痛の訓話:ガット·アウェイバグ

http://markbeljaars.com/wp-content/plugins/sociofluid/images/digg_48.png~~V http://markbeljaars.com/wp-content/plugins/sociofluid/images/reddit_48.png~~V http://markbeljaars.com/wp-content/plugins/sociofluid/images/stumbleupon_48.png~~V http://markbeljaars.com/wp-content/plugins/sociofluid/images/delicious_48.png~~V http://markbeljaars.com/wp-content/plugins/sociofluid/images/furl_48.png~~V http://markbeljaars.com/wp-content/plugins/sociofluid/images/technorati_48.png~~V http://markbeljaars.com/wp-content/plugins/sociofluid/images/facebook_48.png~~V http://markbeljaars.com/wp-content/plugins/sociofluid/images/yahoobuzz_48.png~~V http://markbeljaars.com/wp-content/plugins/sociofluid/images/mixx_48.png~~V http://markbeljaars.com/wp-content/plugins/sociofluid/images/twitter_48.png~~V

先週、私の更新版をリリース目次クリエーターの表 WordPress用のプラグインを。 私は能力を見つけるとテストフォールト、私のコーディングで自分自身を自漫する。 すべてが一つの夜にダウンクラッシュ来た。

長い話を短くカットするには、新しいリビジョンは、ポストのエントリを表示するには、ヘルパー関数を必要としました。 ヘルパー関数は、1つの関数によって呼び出されると私は、したがって、その機能の子のようにヘルパー関数を含むように選出されました。 それはきちんと近接内のすべての関数とそのヘルパーをパッケージとして、これは多くの言語で一般的な方法です。 ところで、親関数は、ページが表示され、そのページがサイトマップの創始者のタグが含まれていない場合、直ちに終了されるたびに呼ばれています。

[OK]をクリックします。 時間が経過する。 それは今午前2時です。 コー​​ドは、テストする準備ができました。 それは創始者のタグが見つからない場合、私はすぐに親関数が終了したことを知っています。 これは、以前に働いて、私はそれの近くにどこ行っていないので、動作し続けるはずです。 右? 私は、サイトマップのページをチェックしてすべての新しいものと古いオプションを試してみると、コードが意図したとおりに動作していることを証明しています。 私はすぐにSVNリポジトリを同期化して太陽が昇る前にいくつかの睡眠を得るためにベッドに急いで出て行く。

翌朝私はプラグインを使用して私が知っている大規模なサイトをチェックすることを決定します。 現実世界のテストに代わるものはありません。 ええ、それはすべてのよさそうだ。 その時点で私は面白そう、サイトマップの記事に気づいた。 私は、カテゴリリンクをクリックして、最初のカテゴリのポストと大きな厄介なPHPのエラーメッセージが表示されました。 うーん。 私は別の大規模なサイトを見ました。 うーん。 たぶん偶然ではありません。 もう一つ見てみましょう。 あーもう!

間違ってだから何? その子関数を覚えていますか? 私はそれは子供たちが邪悪なことができると述べたと聞いたのだが、この場合には真であることが判明した。 ブログページ、カテゴリページ、タグページ、あるいはホーム·ページが表示された場合は、複数の投稿は、単一のページに表示されます。 WordPressは、各ポストにはミニページで、一つの大きなページを形成するために、すべてのミニページを一緒にリンクしているふりをしてこれを行います。 これは私の親関数が複数回呼び出されることを意味します。 通常は問題にならない。 関数は、子関数が含まれているしかし、今、これらの子関数は、親関数は(それらが使用されていない場合でも)呼び出されるたびに作成されます。 したがって、次に2番目のポストが表示されている場合、ページが重複した関数名のエラーメッセージでクラッシュします。 正味の結果は、一見無関係な機能の小さなバグがいくつかの非常に大規模なWebサイトがダウンする原因となったということでした。

物語のモラル:あなたはウェブサイトの管理者である場合、あなたがどんなに大きいか、プラグインがあるかもしれない小さい、すべてのプラグインの更新後のテストの完全なスイートを実行しないことを確認してください。


SpinChimp Leaderboard 728x90