なるようになるブログ

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

rails commit log流し読み(2015/03/30)

2015/03/30分のコミットです。

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

activerecord/CHANGELOG.md

activemodel/CHANGELOG.md

activejob/CHANGELOG.md


Merge pull request #19483 from yui-knk/fix/getting_started

rails guideのGetting Started with Railsの修正です。

Adding a Second Modelの項で、referenceするオブジェクトについての説明を修正しています。


Reduce memory usage when loading types in PG

ActiveRecordの修正です。

DBにPostgresを使用している場合に、メモリの使用量を削減するよう修正しています。

最初にDB接続した際、DBから型情報を取得し、PG::Resultオブジェクトで保持するようにしています。

このPG::Resultオブジェクトは型情報を全て取得する為、大量にメモリを使用する場合があるのですが、そのオブジェクトはクリアーされない為、コネクションが残っている間は大量にメモリを使用してしまうという問題がありました。

そのため、取得する型情報を必要な型だけに制限する、繰り返し使用する文字列はfreezeして不要なインスタンスを生成しないようにする、等の改善を行っています。


Clarify the role of ActiveRecord::Core.encode_with

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

ActiveRecord::Core.encode_withメソッドの説明及びexampleに誤りがあったのを修正しています。


Replace in Rails 4 with in Rails %version% in deprecation message

railties/lib/rails/app_rails_loader.rbの修正です。

binstubを使用している場合にrailsが提供しているexecutableを使用する旨表示するワーニングメッセージ内に含まれているRailsのバージョンを、数字がベタに定義されていたのを、 Rails::VERSION::MAJOR定数を使用するよう修正しています。

-In Rails 4, your app's bin/ directory contains executables that are versioned
+In Rails #{Rails::VERSION::MAJOR}, your app's bin/ directory contains executables that are versioned

Deprecate the :tokenizer option to validates_length_of

validates_length_ofメソッド:tokenizerオプションがdeprecateになりました。

:tokenizerオプションにはStringしか指定出来ない等の制限があり、かつ、普通にカラム名の代わりにRubyメソッドを指定すれば同じ事が出来る、という理由によりdeprecateになったようです。

# before
validates_length_of :essay, minimum: 100,
  tokenizer: ->(str) { str.scan(/\w+/) }


# after
validates_length_of :words_in_essay, minimum: 100

private

def words_in_essay
  essay.scan(/\w+/)
end

Test using sprockets 3

Gemfile及び一部テストの修正です。

sprockets3.0.0.rc.1を使用するよう修正しています。Railsで問題無いか早めに確認する為にですね。


Merge pull request #19034 from jvanbaarsen/explicit-job-base-class

ActionJobの修正です。

generatorが生成するjobクラスが全てApplicationJobクラスの子クラスになるよう修正しています。

ApplicationJobクラスはrails new実行時のみ生成され、job generate時には生成されないので、既に作成済みのrailsアプリの場合、手でファイルを追加する必要があるようです。