2008-10-13
■[Rails] 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 が常に(ログインしてなくても)セットされるので楽かも。