Hatena::Diary

篳篥日記 このページをアンテナに追加 RSSフィード

2008-10-13

[] Railsでプロジェクトをはじめる 17:09  Railsでプロジェクトをはじめる - 篳篥日記 のブックマークコメント

とりあえず、Railsでプロジェクトはじめる時にやる事を書いてみる。

$ rails project_name

でプロジェクト開始。


まず、config/environment.rb の設定から。

タイムゾーンを指定。

  config.time_zone = 'UTC' # 'Tokyo' にする

昔はconfig/environment.rbに、$KCODEを指定してたけど、いまはUTF8なら必要なし。


次に、セッションの設定。いまのRailsデフォルトでは、セッション変数をクッキーに入れてしまうので(しかもサイズが小さい)、セッションDBに入れるためactive_recored_storeの設定を有効にする。具体的には以下のコメントアウトを外す。

# config.action_controller.session_store = :active_record_store

この部分に書いてあるコメントに従って、以下のrakeコマンドを実行し、セッション変数用のテーブルを作成する。

$ rake db:sessions:create

セッションActiveRecordで管理するようにしたら、もう一つやることがある。

app/controller/application.rb にある以下の部分。 CSRF対策protect_from_forgeryの # :secret の手前についているコメントを外す。

protect_from_forgery # :secret => '694d2122a92c25261597ffd5212ac785'

次に、Rspecを入れる。

Rspecについては、

Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)

Rubyist Magazine - スはスペックのス 【第 2 回】 RSpec on Rails (コントローラとビュー編)

を参照。

Rails2.1以降だと、rspecをそのまま入れたのではバグにより、controllerのテストで "You called render with invalid options" とか言われてテストが失敗するので trunkから引っ張って来る。

$ ./script/plugin install http://rspec.rubyforge.org/svn/trunk/rspec
$ ./script/plugin install http://rspec.rubyforge.org/svn/trunk/rspec_on_rails
$ ./script/generate rspec

2008.11.09追記

rspec, rspec on railsはgemでインストールするようになったようだ。

$ sudo gem install rspec
$ sudo gem install rspec-rails
$ ./script/generate rspec

Rspecを入れたら、restful_authenticationを入れる(ユーザがログインするサービスを作るのなら)。Rspecを先に入れるのは、ログインのテストをrspecに自動的にgenerateしてもらうため。

$ ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication

restful_authenticationについては、下記を参考に。

restful_authentication - happy lie, happy life

restful_authentication - 吉見和也(Kazuya Yoshimi) - ZDNet Japan


この状態、つまり、restful_authenticationを入れただけ(generateする前)の状態で、プロジェクトをひな形としてsubversionにでも入れておけば、プロジェクト開始時にexportするたけで、簡単にRailsプロジェクトを開始できる。


ここでは、とりあえず必要最低限ということで、ログインだけできるようにする。

$ ./script/generate authenticated user sessions

メール認証とか入れるなら、config/environment.rbにメールサーバの設定を書く。


app/controller/sessions_controller.rb と app/controller/users_controller.rb にある、

   # Be sure to include AuthenticationSystem in Application Controller instead
  include AuthenticatedSystem

この部分を消して、app/controller/application.rb に移す。


config/routes.rbも書き換えておこうか。ログイン、ログアウトのパス追加。

  # 以下を追加する
  map.login '/login', :controller => 'sessions', :action => 'new'
  map.logout '/logout', :controller => 'sessions', :action => 'destroy'

トップページを変えたいなら、map.rootも追加。トップページを追加したら、public/index.htmlを消しておく。

$ rm public/index.html

あとはお好みだが、app/controller/applicaton.rb のbefore_filterで、

class ApplicationController < ActionController::Base
  # ... 略 ...
  before_filter :set_user

  def set_user
    current_user
  end
end

とかやっておくと、@current_user が常に(ログインしてなくても)セットされるので楽かも。