kaeruspoon

RailsへのPullRequestが数時間でマージしてもらえました

76de73a1dae79a86bb99a813bd8e8e0a?s=30&d=http%3a%2f%2fkaeruspoon%.net2f2014%2fimages%2fno imageTsukasa OISHI

ActiveRecordのクエリキャッシュが、実際にDBとのコネクションをはった後でないと効かないことに気づきました。

Loading development environment (Rails 5.1.2)
irb(main):001:0> ActiveRecord::Base.cache do
irb(main):002:1* Task.find(1)
irb(main):003:1> Task.find(1)
irb(main):004:1> end
  Task Load (0.7ms)  SELECT  "tasks".* FROM "tasks" WHERE "tasks"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
  Task Load (0.1ms)  SELECT  "tasks".* FROM "tasks" WHERE "tasks"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
=> #<Task id: 1, created_at: "2017-06-28 16:18:58", updated_at: "2017-06-28 16:18:58">

コネクションをはれば大丈夫。

Loading development environment (Rails 5.1.2)
irb(main):001:0> Task.connection
=> #<ActiveRecord::ConnectionAdapters::....

irb(main):002:0> ActiveRecord::Base.cache do
irb(main):003:1* Task.find(1)
irb(main):004:1> Task.find(1)
irb(main):005:1> end
  Task Load (0.2ms)  SELECT  "tasks".* FROM "tasks" WHERE "tasks"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
  CACHE Task Load (0.1ms)  SELECT  "tasks".* FROM "tasks" WHERE "tasks"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
=> #<Task id: 1, created_at: "2017-06-28 16:18:58", updated_at: "2017-06-28 16:18:58">

Railsで実際にアプリケーションを作った場合、一番最初のアクセス時はクエリキャッシュが効きません。2回目以降は大丈夫なので、大きな問題ではありません。
ただ、バッチなどでクエリキャッシュを使う場合は、まったく効いていないことになります。

https://github.com/rails/rails/pull/29609
というわけでPullRequestを送りました。

RailsにPullRequestを送ってもなかなか見てもらえないと思っていたのですが(昔、Railsのコミッタの人に言われたこともある)、数分で見てもらえましたし2時間くらいでマージしてもらえました。
これだけリアクションが早いとまたコントリビュートしようという意欲も湧くしとてもいいですね。

普通に仕事をしながらプライベートの時間に送られてくるPullRequestを見るのってとても大変なので、いつもこんなに早くなくてもいいのですが、でも送る側としては素直にうれしいですね。