なるようになるブログ

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

rails commit log流し読み(2018/09/21)

2018/09/21分のコミットです。

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

railties/CHANGELOG.md


Merge pull request #33925 from rafaelfranca/rm-fix-column_defaults

activerecord/lib/active_record/model_schema.rbの修正です。

column_defaultsメソッドでdefault attributesをcopyする際に、deep_dupメソッドを使用するよう修正しています。

attributeのdefaultにProcを使用している場合に、そのProcがcolumn_defaults呼び出し時に評価されるようにする為。


Merge pull request #33112 from yahonda/ci_postgresql10

.travis.ymlの修正です。

CIで使用するPostgreSQLのバージョンを10系に修正しています。


Make assert_<enqueued|performed>_with() compare hashes ignoring order of keys

activejob/lib/active_job/test_helper.rbの修正です。

assert_enqueued_withassert_performed_withメソッドで、argsオプションに指定した値とjobに指定されたargumentsが一致しているかどうかチェックする際に、値の順番が異なっても問題無いよう修正しています。

元々は、

assert_enqueued_with job: KwargJob, args: [{a: 1, b: 1}] do
  KwargJob.perform_later(b: 1, a: 1)
end

のassertがパスしなかった({a: 1, b: 1}{b: 1, a: 1}が一致しているとみなされなかった)のですが、このような場合でも問題無いようになっています。


Use utf8mb4 in all tests and examples

Active Recordの修正です。

各docやテストで使用するcharsetを全てutf8mb4に変更しています。

utf8mb4が使えないMySQL 5.1はMerge pull request #33853 from yahonda/use_utf8mb4_only_if_availableでサポートしなくなり、utf8を使用する必要は無いため。


Merge pull request #33891 from jgorman/remote_names

rails guideのContributing to Ruby on Railsの修正です。

Contributing to the Rails Codeの項で使用しているgitのリモートリポジトリの名称が統一されていなかったのを修正、及び、不要なpush処理等の削除を行っています。


Correct spelling in "Contributing to Ruby on Rails" guide [ci skip]

rails guideのContributing to Ruby on Railsの修正です。

ambiguityambigityにタイポしていたのを修正しています。


Merge pull request #33906 from dark-panda/ignore-psqlrc-when-using-psql

activerecord/lib/active_record/tasks/postgresql_database_tasks.rbの修正です。

PostgreSQL adapterでdb系タスクを実行する際に、~/.psqlrcファイルを読み込まないよう修正しています。

.psqlrcファイルにユーザの入力が必要なコマンド(e.g. \pset pager)等が定義されている場合に、タスクの実行の妨げになってしまう事がある為、それを避ける為、との事です。


Fix missing curly brace in documentation

activerecord/lib/active_record/associations.rbのdocの修正です。

has_and_belongs_to_manyメソッドのdoc内のexampleコードで、閉じ括弧が不足している箇所があったのを修正しています。


Add missing test case for redirect_to when request includes a port.

actionpack/test/controller/redirect_test.rbの修正です。

request hostにportが含まれている場合に、redirect_toメソッドが生成するURLにもportが含まれる事を確認するテストを追加しています。


Merge pull request #33922 from schneems/schneems/collection-caching-easier-to-understand

actionview/lib/action_view/renderer/partial_renderer/collection_caching.rbのdocの修正です。

各処理にドキュメントを追加しています。


Replace line items with chapters [ci skip]

rails guideのActive Record Associationsの修正です。

exmapleコードのLineItemクラスをChapterクラスに変更しています。

関連付けするクラスが、Association Guide replaces Order as example with Author-Book Example …OrderからBookに変更になっており、Bookと関連付けするクラスがLineItemなのはおかしいだろう、という事でChapterに変更されました。


Merge pull request #33932 from schneems/schneems/recyclable-key-support-cache

Active Support、railtiesの修正です。

cache versioningをサポートしていないcache storeを使用している(e.g. dalli_store)、かつ、cache versioningを有効化している場合に、使用しているcache storeではcaching versioningは使用出来ない旨エラーをraiseするよう修正しています。

rails commit log流し読み(2018/09/20)

2018/09/20分のコミットです。

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

railties/CHANGELOG.md

activerecord/CHANGELOG.md


Don't return the same object when using find with an empty array

activerecord/lib/active_record/relation/finder_methods.rbの修正です。

findメソッドに空のArrayを指定した場合に、引数のArrayがそのまま戻り値になっていたのを、新しいArrayのインスタンスを生成し、そちらを返すよう修正しています。


Support environment specific credentials file. (#33521)

railtiesの修正です。

credentialsファイルをenv毎に管理出来るようになりました。

credentials:editcredentials:showコマンドにenvオプションを指定出来るようになっています。

$ EDITOR=vim ./bin/rails credentials:edit -e production
Adding config/credentials/production.key to store the encryption key: xxx

Save this in a password manager your team can access.

If you lose the key, no one, including you, can access anything encrypted with it.

      create  config/credentials/production.key

Ignoring config/credentials/production.key so it won't end up in Git history:

      append  .gitignore

File encrypted and saved.
./bin/rails credentials:show -e production
# aws:
#   access_key_id: 123
#   secret_access_key: 345

env毎のcredentials、及び、keyはconfig/credentialsディレクトリ配下に生成されます(envがproductionの場合はproduction.key、及び、production.yml.enc)。keyを環境変数で指定したい場合は、既存のcredentials同様RAILS_MASTER_KEYで指定可能です(環境変数はenv問わず同じ)。

なお、credentialファイルは、env毎のcredentialファイル -> 共通のcredentialファイル(config/credentials.yml.enc)の順で検索されるようになっており、先に見つかったファイルが使用されます。内容のmergeは行われないので、env毎のcredentialファイルが使用される場合config/credentials.yml.encはロードされません。


Merge pull request #32932 from y-yagi/fixes_32920

actionpack/lib/action_dispatch/http/content_security_policy.rbの修正です。

Content Security Policyのstyle-src directiveでnonceが使用出来るよう修正しています。使用されるnoncescript-srcで使用するのと同じ値です。


Fix env name for master key

railtiesの修正です。

各docで、env毎のcredentialsで使用されるenv keyの値が誤っていたのを修正しています。が、これは勘違いで、docは正しくて実装がおかしいだけでした。


Merge pull request #33912 from gmcgibbon/ar_result_to_hash_deprecate

activerecord/lib/active_record/result.rbの修正です。

ActiveRecord::Result#to_hashメソッドがdeprecateになりました。今後は代わりに、ActiveRecord::Result#to_aメソッドを使用する必要があります。

元々、to_hashメソッドという名前なのに戻り値はArrayで紛らわしい、という問題があった為、to_aにメソッド名が変更される事になりました。戻り値はto_hashと変わらずです。


Merge pull request #33913 from kamipo/counter_cache

Active Recordの修正です。

recordが実際に保存された時にcounter cacheの値を更新するよう修正しています。

これにより、counter cacheが2回インクリメント / デクリメントされてしまう、インクリメントがされない、というようなバグがあったのが修正されています。


Merge pull request #33927 from bogdanvlviv/follow-up-33912

activerecord/lib/active_record/result.rbの修正です。

ActiveRecord::Result#to_aActiveRecord::Result#to_aryのaliasとして定義するよう修正しています。


Fix deprecation hash warning - activerecord test

activerecord/test/cases/adapter_test.rbの修正です。

deprecateになったactiverecord::Result#to_hashメソッドをテスト内で使っている箇所があったのを、to_aメソッドを使用するよう修正しています。


Fixed to RAILS_MASTER_KEY as a default env key for decrypting.

railtiesの修正です。

env毎のcredentialsで、keyを環境変数から取得する場合のkeyにRAILS_MASTER_KEYを使用するよう修正しています。環境変数については、env問わず同じkeyを使うのが良いだろう、という事でそうなったとの事です。


Update MySQL server version and character set in Rails Guide [skip ci]

rails guideのConfiguring Rails Applicationsの修正です。

Configuring a MySQL or MariaDB Databaseの項にあるdatabase.ymlのexampleからencodingの指定を削除、及び、MySQLのバージョンが5.5、5.6でutf8mb4を使用する場合、innodb_large_prefixを有効化する必要がある説明を追加しています。

rails commit log流し読み(2018/09/19)

2018/09/19分のコミットです。

CHANGELOGへの追加はありませんでした。


Avoid the same foreign_key and counter_cache associations on SillyReply

Active Recordのテストの修正です。

テスト用modelのSillyReplyの親クラスをReplyからTopicに変更しています。

SillyReplyReplyで同じforeign keyで違うassociation、及び、counter cacheの定義を行っていました。この影響でSillyReplyを保存するとcounter cacheが2回インクリメントされてしまう、という副作用があり、そのような副作用を避ける為に親クラスを変更しています。


Merge pull request #33897 from bogdanvlviv/follow-up-33751

activejob/lib/active_job/exceptions.rbactivejob/lib/active_job/logging.rbの修正です。

enqueue_retry.active_job hookのpayloadにwaitを追加、job retry時にenqueue_retry.active_job hookを実行するよう修正、等を行っています。

rails commit log流し読み(2018/09/18)

2018/09/18分のコミットです。

CHANGELOGへの追加はありませんでした。


Fix a typo in AR Query Interface [ci skip]

rails guideのActive Record Query Interfaceの修正です。

Specifying Conditions on Eager Loaded Associationsの項のグラマーの修正を行っています。

rails commit log流し読み(2018/09/17)

2018/09/17分のコミットです。

CHANGELOGへの追加はありませんでした。


Raise ActiveRecord::InvalidForeignKey in before_destroy for a blob if attachments exist

activestorage/app/models/active_storage/blob.rbの修正です。

blobの削除前にattachmentsが存在するかチェックして、attachmentsがある場合ActiveRecord::InvalidForeignKeyをraiseするよう修正しています。

Add a foreign-key constraint to the active_storage_attachments table for blobsactive_storage_attachmentsからblobに外部キー制約を追加し、新規に作成されたアプリではこの問題が起きないようになっていますが、外部キー制約が設定されていないアプリケーションでも誤ってデータが削除されるのを防ぐために、この対応を行っています。


Merge pull request #33188 from larskanis/pg-1.1

activerecord/lib/active_record/connection_adapters/postgresql/oid/array.rbactiverecord/lib/active_record/connection_adapters/postgresql_adapter.rbの修正です。

pg gemの1.1対応として、deprecateになった処理の修正、及び、exceptionをraiseするようになったメソッド向けに例外処理を追加を行っています。


Print correct rake command on running AJ integration tests

activejob/test/support/integration/helper.rbの修正です。

Active Jobのテスト実行時に表示するテストのタスク名が実際のタスク名と異なっていたのを修正しています。


Improve readability in form helpers guide [ci skip]

rails guideのAction View Form Helpersの修正です。

exampleコード内の、erbの閉じタグの前にスペースを追加しています。


Remove meaningless ActiveRecord::MigrationContext.new(old_path) in ensure block

activerecord/test/cases/migration_test.rbの修正です。

テストの後処理で元のmigration pathを引数にActiveRecord::MigrationContext.newを呼び出していたのを削除しています。ActiveRecord::MigrationContext.newはただActiveRecord:::MigrationContextインスタンスを生成するだけで副作用はなく、後処理で行う意味が無いため。


Merge pull request #33902 from bogdanvlviv/related-to-31727

activerecord/lib/active_record/migration.rbの修正です。

ActiveRecord::Migrator.migrations_path=メソッドを使用した際に出力deprecation message内で、メソッド名をバッククォートで囲むよう修正しています。

rails commit log流し読み(2018/09/16)

2018/09/16分のコミットです。

CHANGELOGへの追加はありませんでした。


Extract {update,delete}_all_test.rb from persistence_test.rb and relations_test.rb

Active Recordのテストの修正です。

persistence_test.rbrelations_test.rbからupdate_alldelete_allに関するテストをそれぞれupdate_all_test.rb及びdelete_all_test.rbに切り出しています。


Use table name qualified column name for update counters

activerecord/lib/active_record/relation.rbの修正です。

update countersで更新対象のカラムをテーブル名で修飾するよう修正しています。

MySQLだとjoin + update、という事が行え、テーブル名で修飾しておかないとその場合にambiguous errorになってしまう場合がある為。


Bump chromedriver-helper to 2.0

Gemfile.lockの修正です。

chromedriver-helper gemのバージョンを2.0.0に更新しています。


Load chromedriver-helper.rb

ci/qunit-selenium-runner.rbの修正です。

chromedriver-helperを使用するのにchromedriver-helperをrequireするよう修正しています。

chromedriver-helper 2.0.0からbin shimの名称が変更(chromedriver -> chromedriver-helper)になり、その影響で、lib/chromedriver-helper.rb内でSelenium::WebDriver::Chrome.driver_pathの設定処理を行うようになった為。chromedriver-helperをrequireしないと、driver_pathの設定が行われず、chromedriverがchromedriver-helper経由で起動しなくなります。

参考:Rename chromedriver so it does not conflict with system installed


ActiveRecord::Associations::Preloader should preload all instances of the same record

activerecord/lib/active_record/associations/preloader.rbの修正です。

Preloader#preloadメソッドでrecords.uniq!をしていたのをやめて、同じレコードでも全てのインスタンスをpreloadするよう修正しています。joins + preloadを組み合わせて使うようなケースでも正しくassociationがpreloadされるようにする為。

rails commit log流し読み(2018/09/15)

2018/09/15分のコミットです。


[ci skip] Fix documentation for Response#content_type

actionpack/lib/action_dispatch/http/response.rbのdocの修正です。

Response#content_typeメソッドのdocの内容がResponse#content_type=メソッドについて説明しているものだったので、そのままcontent_type=メソッドのdocに移動しています。


Update associations.rb API documentation [ci skip] (#33857)

activerecord/lib/active_record/associations.rbのdocの修正です。

belongs_toメソッドのdoc内、association=(associate)メソッドについて説明している箇所に既存レコードの変更や削除は行わない旨説明を追加しています。


Add test for config.active_storage.routes_prefix

railties/test/application/configuration_test.rbの修正です。

confg.active_storage.routes_prefixに任意の値を指定した場合のテストを追加しています。


Merge pull request #33878 from kamipo/fallback_to_unprepared_statement

Active Recordの修正です。

Merge pull request #33844 from kamipo/too_many_eager_load_ids でunprepared statementを使うように修正したのですが、bind paramsの数が制限(adapterに関わらず65535)を超えない場合は以前通りprepared statementを使うようにし、制限を越えた場合だけunprepared statementを使うよう修正しています。


Bump marcel for significant gem size reduction

Gemfile.lockの修正です。

marcel gemのバージョンを0.3.3に更新しています。

誤って含まれていたテストデータをパッケージに含まないようにした為、gemのサイズが大分削減されています。参考:Gemspec ignore test files for reduce gem size from 7.5MB to 7.5KB


Unlock pg verson

Gemfileの修正です。

pg gemのバージョンロックを削減しています。

pg 1.1.0だとActive Recordのテストがエラーになってしまう為にバージョンロックを追加したのですが、1.1.3だとテストが全て通るようになっている為。