SwitchPointとは?
https://github.com/eagletmt/switch_point
DBの書き込み接続と読み込み接続を切り替えることができるgemです。
SchemaCacheについて
Railsではrake db:schema:cache:dump
を使うことでdb/schema_cache.yml
にテーブルやカラムの情報が書き出されます。
このキャッシュを使うことでActiveRecordが型情報などを特定する手助けになします。
SwitchPointによりSchemaCacheが使えなくなる
SwitchPointを使うとActiveRecord::Base
とは別のConnectionPoolを保持してしまうため、SchemaCacheが自動で読み込まれません。
これによる、SQL実行時にSHOW FULL FIELDS FROM some_table
が実行され不要な遅延を発生させてしまいます。
対策
config/initializers/switch_point.rb
ActiveSupport.on_load(:after_initialize) do
ApplicationRecord.switch_point_proxy.connection.pool.schema_cache = ActiveRecord::Base.connection.schema_cache
ApplicationRecord.switch_point_proxy.connection.schema_cache = ActiveRecord::Base.connection.schema_cache
end
initializer内でswitch_point_proxy
のもつConnectionPoolにActiveRecord::Base
と同様のschema_cacheを設定してあげることで対策できます。
※ただしこのコールバックより適当な実行タイミングがあるかは未確認