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へのリンクが誤っていたのを修正しています。