なるようになるブログ

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

rails commit log流し読み(2018/04/24)

2018/04/24分のコミットです。

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

activestorage/CHANGELOG.md


Merge pull request #31881 from yewton/rails-ujs-with-yarn-autoclean

actionview/app/assets/javascripts/README.mdの修正です。

yarn autocleanコマンドを実行した後に、.yarncleanassetsディレクトリを含まないよう注記を追加しています。


Remove key from session by using session.delete (#31685)

rails guideのAction Controller Overviewの修正です。

Accessing the Sessionの項にある、ログアウト処理のexampleコードで、sessionからuser idを削除してなかった(nilを入れいただけ)のを、明示的にuser idを削除するようコードを修正しています。


Merge pull request #32703 from janko-m/halve-memory-allocation-in-s3-download

activestorage/lib/active_storage/service/s3_service.rbの修正です。

S3Service#downloadメソッドでbodyを取得するのにreadメソッドを使用していたのを、stringメソッド使用するよう修正しています。

-          object_for(key).get.body.read.force_encoding(Encoding::BINARY)
+          object_for(key).get.body.string.force_encoding(Encoding::BINARY)

Aws::S3::Object#getStringIOオブジェクトを返す、かつ、StringIO#readは値をコピーした新しいオブジェクトを返します。そのため、不要なオブジェクトの生成を避けるよう、値をそのまま取得出来るstringメソッドを使用するようにしています。


Save a hash allocation in MySQL statement pool

activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rbactiverecord/lib/active_record/connection_adapters/mysql/database_statements.rbの修正です。

statement poolを保持する際に、明示的にHashを生成していたのを、生成しないよう修正しています。古いMySQL adapterの為のコードだったとのことです。


Merge pull request #32471 from janko-m/use-image_processing-gem

Active Storageの修正です。

ファイルの変換処理にImageMagick(mini_magick gem)を直接使用していたのを、image_processing gemを使用するよ修正しています。

image_processingはGraphicsMagickもサポートしているので、ファイルの変換処理にlibvips(ruby-vips gem)も使用出来るようになります。vipsを使用したい場合は、config.active_storage.variant_processorvipsを指定すればOKです。

この対応により、mini_magick gemを直接使用するのはdepecateになりました。合わせて、変換処理でImageMagickのオペレーションを直接指定していたのを、image_processingが提供するメソッド(resize_to_fitresize_to_fill等々)を使用する必要があります。

ちなみにimage_processing gemの作者はshrine: File Attachment toolkit for Ruby applicationsの作者のjanko-m氏。


Flush tempfile after populating it

activestorage/lib/active_storage/downloading.rbの修正です。

Downloading#download_blob_toメソッドでblobデータをファイルに書き込んだ後、バッファを出力する為にflushメソッドを呼び出すよう修正しています。


Use strict_encode64 instead of gsub newline for ScreenshotHelper

actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rbの修正です。

ScreenshotHelper#inline_base64メソッドでpathをencode64メソッドでBase64エンコードした後に改行コードを削除してたのを、strict_encode64メソッドを使ってそもそも改行コードが含まれないようにしています。


columns is cached in the statement

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

columnsをクラス内でHashにキャッシュしていたのですが、そもそもStatement classでcolumnsをキャッシュしていたので、そちらを使用するよう修正しています。