RailsへのPullRequestが数時間でマージしてもらえました
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を見るのってとても大変なので、いつもこんなに早くなくてもいいのですが、でも送る側としては素直にうれしいですね。