2019/01/31分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
Adds basic automatic database switching to Rails
Active Recordの修正です。
HTTP requestの種類に応じて自動で使用するconnectionをswitchする為のDatabaseSelector
middlewareを追加しています。
このmiddlewareでは、HTTP requestがGET、または、HEADの場合に自動でreplica database connectionを使うようになっています。それ以外のrequestの場合はprimaryを使用します。
また、replicaに同期されるまでの時間を考慮し、最後のwrite処理から2秒以上経過した場合のみ、replicaのconnectionを使うようになっています。write処理から2秒未満の場合は、GET / HEAD requestの場合も、primary connectionが使用されるようになっています。最後のwrite処理の時間はsessionに値を保持するようになっており、その値と現在時間との比較でチェックが行われるようになっています。
この2秒という時間や、データを取得する先の決定処理(Resolver)や、write処理を保持する方法はconfigでカスタマイズ出来るようになっています。
config.active_record.database_selector = { delay: 2.seconds } config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver config.active_record.database_operations = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
上記がデフォルトの設定です。例えば、write処理の時間をsessionではなくcookieに保存したい場合、独自のoperator classを作成し、config.active_record.database_operations
にそのclassを指定すればOKです。
Merge pull request #35093 from rails/av-base-constructor
Action Viewの修正です。
ActionView::Base
クラスに、インスタンス生成用のbuilder methodを追加しています。
元々はActionView::Base.new
で全てのケースを対応していたのですが、それにより処理が複雑になってしまっていた為、view pathを指定したい場合は、ActionView::Base.with_view_paths
、contextを指定したい場合はActionView::Base.with_context
、という風に、インスタンス生成時に指定したい値に合わせたbuildメソッドを提供するようにしていす。
activemodel/lib/active_model/validations/length.rb
、
activemodel/test/cases/validations/numericality_validation_test.rb
の修正です。
テスト名、及び、エラーメッセージ内のタイポを修正しています。
Write update_last_write_timestamp after request
activerecord/lib/active_record/middleware/database_selector/resolver.rb
の修正です。
DatabaseSelector::Resolver#write_to_primary
メソッドで、最後のwrite時間の記録をrequest処理の前にやっていたのを、request処理の後に行うよう修正しています。
request処理の前に時間を記録してしまうと、request処理に時間が掛かった場合にrepliaへの遅延待ち時間の意味が無くなってしまう(例えばrequest処理に5秒掛かった場合、遅延待ちをまたずreplicaからデータの取得が行われてしまう)為。
Merge pull request #34980 from y-yagi/fixes_34979
railties/lib/rails/generators/actions.rb
の修正です。
generate
action実行時に、不要なRAILS_ENV=xxx
がgeneratorの引数と渡されてしまう、というバグがあったのを修正しています。
Fix ERB.new
argument deprecated warning
railties/test/generators/generators_test_helper.rb
の修正です。
Ruby 2.6以上ではERB.new
の引数にキーワード引数を使用するよう修正しています。
activerecord/lib/active_record/middleware/database_selector/resolver.rb
の修正です。
DatabaseSelector::Resolver#write_to_primary
メソッドから不要なblockを削除しています。
Fixed typo for DatabaseSelector::Resolver documentation
activerecord/lib/active_record/middleware/database_selector/resolver.rb
のdocの修正です。
inherits
をinherts
にタイポしていたのを修正しています。
activerecord/lib/active_record/middleware/database_selector.rb
のdocの修正です。
multiple
をmutliple
にタイポしていたのを修正しています。
activestorage/lib/active_storage/previewer/poppler_pdf_previewer.rb
のdocの修正です。
dimensions
をdimesions
にタイポしていたのを修正しています。