Thursday, October 08, 2009

Rails Application - Reading Tracks (1)

Rails Application Tracks を読む

ここでは,Rails Application, Tracksの振舞いを見てみる。
Tracks を動かすのは簡単だ。自分は Rails 2.3.3 の環境を構築して,SQLite3,libsqlite3-ruby をインストールすれば準備完了。Download ページから 1.7 release を展開して,rake db:migdate を実行した後,server を実行する(databaseのconfigは用意されてある)。
起動してみて,webブラウザでアクセスすると,コンソールに以下の内容が表示される。


192.168.1.102 - - [08/Oct/2009:21:57:59 JST] "GET / HTTP/1.1" 302 97
- -> /
192.168.1.102 - - [08/Oct/2009:21:57:59 JST] "GET /login HTTP/1.1" 302 101
- -> /login
192.168.1.102 - - [08/Oct/2009:21:58:00 JST] "GET /users/new HTTP/1.1" 200 2523
- -> /users/new
どうやら login controller を経由して,users_controller の new アクションを実行している模様。 config/routes.rb の内容を確認してみると,

ActionController::Routing::Routes.draw do |map|
  map.with_options :controller => 'login' do |login|
    login.login 'login', :action => 'login'
    login.formatted_login 'login.:format', :action => 'login'
    login.logout 'logout', :action => 'logout'
    login.formatted_logout 'logout.:format', :action => 'logout'
  end
  # snip 
とあるので,login controller の login action を呼びだしている模様。login.login とか login.formatted_login とかが何を表現しているのかがよくわからない。これは "/login" や "login.m" というリクエストに対して名前をつけたと考えていいのだろうか?
このことを確認するため,ユーザ登録後に "/login","/login.m","/login.xml" というリクエストを発行した。login_controller の login method の最後の方に,こんな表示がある。

      respond_to do |format|
        format.html
        format.m   { render :action => 'login_mobile.html.erb', :layout => 'mobile' }
従って最後の "/login.xml" は xml 形式のrespondが定義されていないので,何も表示されない。実際に "/login.xml" では何も表示されない。また "/login.m" ではいかにも携帯電話用のログイン画面が表示された。
さて,login_controller.rb の内容に戻ってみる。

  def login
    if openid_enabled? && using_open_id?
      login_openid
    else
      @page_title = "TRACKS::Login"
      case request.method
      # snip
        when :get
          if User.no_users_yet?
            redirect_to :controller => 'users', :action => 'new'
            return
          end
      end
      # snip
    end
  end
とあるので,ユーザを未登録の場合,users controller の action new へ redirect されているのがわかる。

次にユーザ(admin)を登録してみる。コンソール出力は以下の通り。


192.168.1.102 - - [08/Oct/2009:22:52:51 JST] "POST /users HTTP/1.1" 302 92
http://192.168.1.101:3000/users/new -> /users
192.168.1.102 - - [08/Oct/2009:22:52:52 JST] "GET / HTTP/1.1" 200 10825
http://192.168.1.101:3000/users/new -> /
192.168.1.102 - - [08/Oct/2009:22:53:01 JST] "GET /stylesheets/cache/bundle.css?1255009973 HTTP/1.1" 200 29449
http://192.168.1.101:3000/ -> /stylesheets/cache/bundle.css?1255009973
192.168.1.102 - - [08/Oct/2009:22:53:01 JST] "GET /behaviours/index.js HTTP/1.1" 304 0
http://192.168.1.101:3000/ -> /behaviours/index.js
192.168.1.102 - - [08/Oct/2009:22:53:01 JST] "GET /javascripts/cache/bundle.js?1255009981 HTTP/1.1" 200 247440
http://192.168.1.101:3000/ -> /javascripts/cache/bundle.js?1255009981
次から users_controller.rb の内容を追ってみようと思う。

No comments: