2018/10/11分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
- Enum raises on invalid definition values
- Add basic API for connection switching to support multiple databases.
Merge pull request #34137 from gmcgibbon/db_migrate_status_multi_db
activerecord/lib/active_record/railties/databases.rakeの修正です。
rails db:migrate:statusに複数DBサポートを追加しています。
rails db:migrate:status:animalsのように、末尾にDB名を指定出来るようになっています。
Merge pull request #34110 from albertoalmagro/enum-raises-on-invalid-definition-values
activerecord/lib/active_record/enum.rbの修正です。
enumに不正な値(e.g. [proposed: 1, written: 2, published: 3]のようなHashのArray)を指定した場合に、ArgumentErrorをraiseするよう修正しています。
Basic API for connection switching
activerecord/lib/active_record/connection_handling.rb、
activerecord/lib/active_record/core.rbの修正です。
複数DB向けのconnection switching APIを追加しています。
2つAPIが追加されています。まずは、modelで使用する為のconnects_toメソッド。
class AnimalsModel < ApplicationRecord self.abstract_class = true connects_to database: { writing: :animals_primary, reading: :animals_replica } end class Dog < AnimalsModel # connected to both the animals_primary db for writing and the animals_replica for reading end
databaseにはroleとdatabase_keyのペアのHashを指定します。connects_toメソッド実行時にdatabase_keyに指定されたDBへ接続し、connection handelrの生成を行います。
そのため、database.ymlに指定されていないdatabase_keyを指定した場合、クラス定義時にエラーになります。APIの戻り値はestablished connectionsのArrayです。
もうひとつは、connects_toで指定した特定のroleにblockの間だけ接続する為のconnected_toメソッドです。
AnimalsModel.connected_to(role: :writing) do Dog.create! # creates dog using dog connection end AnimalsModel.connected_to(role: :reading) do Dog.create! # throws exception because we're on a replica end AnimalsModel.connected_to(role: :unknown_ode) do # raises exception due to non-existent role end
また、database keyを指定する事でmodelに依存せず特定のDBに接続出来るようになっています。
ActiveRecord::Base.connected_to(database: :animals_slow_replica) do Dog.run_a_long_query end
Remove invalid magic comment [ci skip]
actionpack/lib/action_dispatch/http/mime_type.rbの修正です。
frozen-string-literalのmagic commentが2つ記載されてしまっていたのを修正しています。
[ci skip] Fix link to Concurrent::ThreadPoolExecutor docs
activejob/lib/active_job/queue_adapters/async_adapter.rbのdocの修正です。
Concurrent::ThreadPoolExecutorのdocへのリンクが誤っていたのを修正しています。