Ridgepoleを導入していたら、end
のインデントがずれていたので修正した。
どうやらテストでは https://github.com/winebarrel/rspec-match_fuzzy を使っていて空白文字の違いを無視していたからこれに気が付かなかったっぽい。
非Railsでガンガンスレッドを使うようなアプリケーションでActiveRecordを使おうとしたら、コネクションが足りなくて怒られた。 そういえばそんなのあったなあと思い出しつついろいろ調べていた。
雑な理解だと、次のような問題が起こっている感じ。
- ActiveRecordはスレッドごとにDBのコネクションを確保する(解放しない)
- コネクションプールはデフォルトは5個
- 5個以上のスレッドでDBに接続しようとすると、コネクションプールからコネクションを取ってこれなくて5病後に死ぬ
これを解決するには、コネクションを解放するか、プールを増やす必要がある。
みたいなのをruby-jpで悩んでいたら、wakaba260さんに助けてもらった。
プール数をとりあえず1000とか大きい数にしておいて、かつThread.new
した時に合わせてwith_connection
でくくってスレッドが死んだ時にコネクションを解放するようにしておくと面倒が少なくて良さそう。
プール数が1000でも実際にコネクションが張られるまではコネクションが1000個張られるわけではないので、大きい数を指定してもそんなに問題はない。
そうですね。一応たしかconnection pool側でポーリングして、親スレッドが死んでるコネクションは切ってた気はしますが、書いてあったほうがgoodっぽさ by wakaba260
ということなので、with_connection
はなくてもなんとかなりそうだけど、あったほうがマシっぽい。
ぼくのかんがえたさいきょうのGitHub Issue Readerを作っている。 GitHub Issue Readerを作るのは2,3回目ぐらい。 名前から想像できると思うのだけど、GitHubとSlackをつなぐ形になる。
とりあえずコアの機能は一通り動くようになった。 でもまだ実用的ではない。 Issueのコメントとかレビューコメントとか、そういうイベントを1つ1つ対応していく必要がある。多分泥臭くて大変。
あとは将来的にはGFMをSlackのMarkdownのパチモンに変換するコードが必要になりそうな気がする。めんどそうだなあ