なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2018/10/11)

2018/10/11分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

railties/CHANGELOG.md

activerecord/CHANGELOG.md


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