これまで株式会社ソニックガーデンのギルドメンバーとして株式会社ジェニュインブルーを立ち上げ、納品しない受託開発により複数のスタートアップ企業様のシステム開発に携わって参りました。
この度、パートナー企業様のビジネスの発展に伴いそれぞれのサービスが私の手から離れたタイミングで会社を清算することになり手続き中です。なにより携わったサービスがみな順調であることは嬉しい限りです。
直接ご挨拶が出来なかった方も多いのですが、これまでご愛顧賜りました皆様に心より感謝申し上げます。
これまで株式会社ソニックガーデンのギルドメンバーとして株式会社ジェニュインブルーを立ち上げ、納品しない受託開発により複数のスタートアップ企業様のシステム開発に携わって参りました。
この度、パートナー企業様のビジネスの発展に伴いそれぞれのサービスが私の手から離れたタイミングで会社を清算することになり手続き中です。なにより携わったサービスがみな順調であることは嬉しい限りです。
直接ご挨拶が出来なかった方も多いのですが、これまでご愛顧賜りました皆様に心より感謝申し上げます。
ちょっと最近構ってあげられていなかったんですね。そしたら、どうもpush通知が死んでいた模様。つまり、pplogはスネていた。
最近 pplog の通知が飛んでこなくなってしまった
— ぺこちゃん (@ryopeko) 2014年10月16日
@ken_c_lo #pplog で購読してる人たちのポエム更新push通知がトドカナイ疑惑
— イカID: Toshiwo (@toshiwo) 2014年10月28日
ios8関連かなーと静観していたのですが、昨日ようやく本腰で調査しました。
pplogは、herokuで運用しており、ログはAddonのpapertrailに流しております。なのでpapertrailを眺めながらポエんでみました(ポエむとはポエムを投稿すること)。すると、こんなログが
pplog app/web.1: Too many channels (100), max 10
おやこのログは、、、
そう、このログはPusherですね。Too many channels時のエラーだ!記憶ではmax 100だったはずなので、いつの間にか仕様が変わっていたようです。
ドキュメントを見ると、
Array of one or more channel names - limited to 10 channels
確かに、書いてありますね。実はpplogでは地味ぃ〜にpusherを使っているんですね。そうです、デスクトップ通知です。各ユーザーのchannelに対して、ポエムの投稿通知をpusher経由で送っているのです。
つまり、100channelごとにpusherに通知ところを10channelに変えるべきなんですね。この時点でもはや原因が特定出来ました。本気で調べれば瞬殺じゃん。ほんとすみません。
そうなんです。関係無いです。
ポエムの投稿通知をafter_commit
でまとめて行っていたから。after_commit
を使う理由は、worker(つまり別プロセス)で投稿のidを取得したいからです。
イメージとしてはこんな感じです。
def notify(trigger) notify_email(trigger) notify_pusher(trigger) notify_apns(trigger) notify_gcm(trigger) end
def notify_pusher # channelの分だけPusher.triggerする Pusher.trigger(... end
after_commit
といえば、exceptionをシカトします。なので、after_commit
は使いドコロはあるんですが要注意して使わないといけないです。んー。
つまり、notify_pusher内でToo many channels~
エラーが起きてしまうと、以降の通知が動作しませんでした。さらにafter_commit
内のPusher::Errorのため、bugsnagなどでも補足されない。
@willnet さんからのコメント頂きました。ありがとうございます。
Rails 4.2 からは config で設定すると、after_commit のエラーをシカトしなくなるみたいですよ( ˘ω˘) https://github.com/rails/rails/pull/16537/files
トランザクション完了後のエラーを発生させるとなると、適切な補足が必要だなーと感じます。opt-inなのもそういう理由だからかなと思います。
今回の件で、ActiveRecordのcallbackのうち、after_roollback/after_callbackは慎重な扱いが必要だと実感しました。
after_commit
内でのエラーを補足してbugsnagとかにちゃんと投げる。
で多分行けると思います。ツッコミ歓迎です。。。
購読数が10人を超えるユーザーがポエムを投稿した場合、iosのpush通知、androidのpush通知が実行されていませんでした。ごめんね( ˘ω˘)"
push通知直ったよ。ごめんね( ˘ω˘)"
— ポエム (@pplog_net) 2014年11月1日
ちゃんとWebサービスはヨシヨシしないとスネるのです。ちゃんと構ってあげよう。
では、ヨシヨシとは何か。構ってあげることです。気にかける、とも言えるでしょう。
Webサービスのヨシヨシには、
みたいなことが挙げられます。自分のWebサービスがなかったとしても、Web業界で働いていると何かしら自分が関わるサービスがあるはずです。そのサービスをヨシヨシしましょう、可愛がりましょう。Webサービスは生き物です。性格にもよりますが、適切な距離感で気にかけてあげることはとても大事だと思います。こうしたことは、仕事でも心がけたいですね。そう、愛せるWebサービスに関わろう。