なるようになるブログ

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

rails commit log流し読み(2016/01/09)

2016/01/09分のコミットです。

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

activerecord/CHANGELOG.md

railties/CHANGELOG.md


Merge pull request #22934 from mperham/master

Action Cableの修正です。

Action Cableの非同期処理にcelluloidを使用していたのを、concurrent-rubyを使用するよう修正しています。

これにより、celluloid及びその関連のgemがrailsのgemの依存から削除されています。

が、ちょっと問題が発生したらしく後ほどrevertされています。


Revert "Move async execution from celluloid to concurrent-ruby"

Action Cableの修正です。

先ほどマージされたAction Cableの非同期処理にcelluloidを使用していたのを、concurrent-rubyを使用するよう修正した対応をrevertしています。

マージされた対応をBasecamp 3で実際動かしてみた所、幾つか問題が発生した為、一時的にrevertしたとの事です。後ほど問題が起きた箇所を確認し、対応するとの事です。


Get update_attributes working with SchemaMigration

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

SchemaMigration#primary_keyversionを使用するよう修正しています。

schema_migrationsテーブルのversionカラムはユニークである事が保証されている為、かつ、primary_keyが無いとupdate_attributesが動作しない為、primary keyを設定するよう対応したとの事です。

この対応により、SchemaMigrationに対して、update_attributesが使用出来るようになっています。

ActiveRecord::SchemaMigration.last.update_attributes(version: "20160106090010"

Merge pull request #22967 from schneems/schneems/generic-metadata

Active Recordの修正です。

DB破壊系のtask(db:dropdb:purge)等を指定された環境(デフォルトはproduction)で動作しないよう対応しています。

実際にdb:dropをproduction環境で実行しようとすると、ActiveRecord::ProtectedEnvironmentErrorが発生します。

$ ./bin/rails db:drop RAILS_ENV=production
rails aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your 'production' database
if you are sure you want to continue, run the same command with the environment variable
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
/home/yaginuma/program/rails/master_y_yagi/rails/activerecord/lib/active_record/tasks/database_tasks.rb:51:in `check_protected_environments!'
/home/yaginuma/program/rails/master_y_yagi/rails/activerecord/lib/active_record/railties/databases.rake:5:in `block (2 levels) in <top (required)>'
/home/yaginuma/program/rails/master_y_yagi/rails/railties/lib/rails/commands/rake_proxy.rb:13:in `block in run_rake_task'
/home/yaginuma/program/rails/master_y_yagi/rails/railties/lib/rails/commands/rake_proxy.rb:10:in `run_rake_task'
/home/yaginuma/program/rails/master_y_yagi/rails/railties/lib/rails/commands/commands_tasks.rb:51:in `run_command!'
/home/yaginuma/program/rails/master_y_yagi/rails/railties/lib/rails/command.rb:20:in `run'
/home/yaginuma/program/rails/master_y_yagi/rails/railties/lib/rails/commands.rb:19:in `<top (required)>'
/home/yaginuma/program/rails/master/bin/rails:9:in `require'
/home/yaginuma/program/rails/master/bin/rails:9:in `<top (required)>'
/home/yaginuma/program/rails/master/bin/spring:13:in `<top (required)>'
./bin/rails:3:in `load'
./bin/rails:3:in `<main>'
Tasks: TOP => db:drop => db:check_protected_environments
(See full trace by running task with --trace)

強制的に動作させたい場合は、エラーメッセージにある通り、DISABLE_DATABASE_ENVIRONMENT_CHECK=1を設定すればOKです。

また、production以外の環境を指定したい場合は、ActiveRecord::Base.protected_environmentsで指定可能になっています。

昔同じような事をするgemを作っていたのですが、これによりgemが不要になってしまいました。rails標準で入るの自体は良いことですねえ。


Refactor tz aware types, add support for PG ranges

Active Recordの修正です。

TimeZoneに関する処理のリファクタ、及び、PostgreSQLtsrangetstzrange型を使用した場合にTime.zoneに設定した値が反映されないバグがあったのを修正しています。


[ci skip] Fix typo Renderering --> Rendering

actionpack/lib/action_controller/metal/renderers.rbのdocの修正です。

RenderingRendereringにタイポしている箇所があったのを修正しています。


Fix the broken build

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

TimeZoneConversion::TimeZoneConverter#convert_time_to_time_zoneメソッドFloat::INFINITYを渡した場合に無限ループが発生していまう問題があったのを修正しています。


[ci skip] automatic_inverse_of returns false not nil (document fix)

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

#automatic_inverse_ofメソッドのdocに、nil又はinverse association nameがリターンされる、と書いてあったのですが、実際はfalse又はinverse association nameがリターンされるようになっており、その旨docを修正しています。


Added missing CHANGELOG entry for https://github.com/rails/rails/pull/22976

Get update_attributes working with SchemaMigrationの対応について、CHANGELOGにentryを追記しています。


match the environment variable name that actually checking and error message

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

DB破壊系のtask(db:dropdb:purge)等を指定された環境(デフォルトはproduction)で動作しないよう対応したコミット(Merge pull request #22967 from schneems/schneems/generic-metadata)で、強制的に動作させたい場合に設定する環境変数が、エラーメッセージに表示する環境変数と違う値を見ていた(エラーメッセージではDISABLE_DATABASE_ENVIRONMENT_CHECKと表示されていたが、実際のコードではDISABLE_DATABASE_internal_metadataを見ていた)のを、同じ値を見るよう修正しています。


rake log:clear task updated refs[#22544]

railties/CHANGELOG.mdの修正です。

rake log:clearタスクのデフォルトの挙動が、*.logを削除から、デフォルトの環境のログファイル(development,test,production)のみ削除するように修正しています。

従来通り全てのログを削除したい場合は、ENV['LOGS']allを指定して実行すればOKです。また、特定の環境のログだけ削除したい場合も、同様にENV['LOGS']を指定すればOKです。

# 全てのログを削除
LOGS=all ./bin/rails log:clear

# test, stagingのログを削除
LOGS="test,staging" ./bin/rails log:clear