トップ «前の日記(2012-01-19) 最新 次の日記(2012-01-26)»

たいぷらいたーざっき。

2010|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|09|

2012-01-21 Ruby on Rails 3.2.0リリース。

_ [Rails][Ruby] Ruby on Rails 3.2.0リリース。

Ruby on Rails 3.2.0がリリースされました。さっそく某アプリを人柱にしてみましたが、特に何も起こりませんでした。


ここからは気になったところをいくつか抜粋&適当に意訳。

EXPLAIN

「このSQL文で、きちんとインデックスは使われるのかな~」とか、いわゆる「遅いクエリ(Slow query)」を調べるとか、そういう用途に使うのが、SQLのEXPLAIN文です。

1.9.2p290 :003 > puts User.limit(5).explain
  User Load (0.2ms)  SELECT "users".* FROM "users" LIMIT 5
  EXPLAIN (0.1ms)  EXPLAIN QUERY PLAN SELECT "users".* FROM "users" LIMIT 5
EXPLAIN for: SELECT  "users".* FROM "users"  LIMIT 5
0|0|0|SCAN TABLE users (~1000000 rows)

Automatic Query Explains

このEXPLAINですが、"Automatic Query Explains"と題して、一定時間以上かかったクエリを自動的にEXPLAINしてwarnレベルでログ出力してくれる機能がつきました。デフォルトで、developmentでは0.5秒以上、productionでは無効(時間計測の処理を省くためでしょうか)になっています。データベースアクセスまわりのパフォーマンス改善・検証にはもってこいです。

Faster Development Mode

これまで、development環境では毎回クラスをロードして解釈して云々とやっていたところ、書き換えられたクラスと関連クラスのみを再ロードするモードができました。これでdevelopment環境も速くなります。

このへんでうまくいかないなー、と思ったときは、 config.reload_classes_only_on_change を false にすると無効にできるようです。

rake routes が見やすくなった。

before
            user GET    /users/:id(.:format)            {:action=>"show", :controller=>"users"}
after
            user GET    /users/:id(.:format)            users#show

端末の横幅が狭くても折り返されないので、とっても見やすいです。

ActiveRecord::Relation#uniq

メソッドチェインができるクエリメソッドとして uniq が追加されています。SQLのDISTINCT指定に相当するものです。

    Before:
        Client.select('DISTINCT name')

    After:
        Client.select(:name).uniq

select(sql, ...) メソッドでSQL文を指定してもよいのですが、そうするとDBMS依存になってしまいがちなので,たぶんクエリメソッドを使ったほうがよいのかなと推測。いったん配列にしてArrayのuniqを使うのはDBMSの機能が生かせてなくてマイナスです。

ActiveRecord::Relation#first_or_create, first_or_create!, first_or_initialize

「あったら最初のものを、なかったら作ってくれ」メソッド。

ActiveSupport:TaggedLogging

タグ相当のものを先頭に付加したログを記録することができるようです。

Array#prepend, Array#append

prependは配列の先頭に追加するもので、unshiftのエイリアス。appendは配列の末尾に追加するもので、<<(push)のエイリアス。

まあ、unshiftって書かれるよりはわかりやすいかな。

本日のリンク元

トップ «前の日記(2012-01-19) 最新 次の日記(2012-01-26)»

operated by Kindai ECL

operated by Kindai ECL