AccountController#login のソースをちょっと見てみたらびっくりしたんだけど
class AccountController < ApplicationController def login if request.get? # Logout user self.logged_user = nil ・・・省略・・・ private def logged_user=(user) if user && user.is_a?(User) User.current = user session[:user_id] = user.id
class User < ActiveRecord::Base def self.current @current_user ||= User.anonymous end
User クラスのインスタンス変数にセットしてるわけだけど、これって rails が 1 リクエストに対して 1 プロセスを使用して処理しないといけないから成り立つわけで、メモリ領域を共有するマルチスレッド対応にしようとしたら泣けそうな気がするんだけど。
rails 2.2 からはマルチスレッド対応だーって盛り上がってるのになぁ。
rails アプリは 1 プロセスでの動作を前提につくるものなんだろうか?
それとも User.current = user なんて処理はスレッドローカルになってるのか?なわけないよなぁ。不思議。