sign_in できない問題
某所で Ruby on Rails チュートリアル を使って実習なナニをヤらせて頂いてるのですが、標題の問題が出てたりしてます。
何が原因なのか分からない上に、現時点の状態を Github に push してもらうのを忘れていたり。仕方が無いので中身を掘ってみることにします。8 章な commit を取り出せば良いのかどうか。
branch は sign-in-out な模様。自分持ちのリポジトリをローカルにコピィしてログを確認。このあたりなのか。
commit 071c43b9673f354457edf30b111434ca45a0b3ed Merge: f547dae d4e1ef3 Author: YAMANE Toshiaki <yamanetoshi@gmail.com> Date: Sat Jan 26 08:23:59 2013 +0900 Merge branch 'sign-in-out'
とりあえずこの commit を checkout して中身確認か。念のために branch 作るか。
$ git checkout -b test
で、以下かな。
$ bundle install $ bundle exec rake db:migrate $ bundle exec rake db:test:prepare $ bundle exec rspec spec/
とりあえず掘削の始点は signup するあたりなのかどうか。
あらら
therubyracer な install で微妙なメセジが出力されておる。
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /Users/rms/.rbenv/versions/1.9.3-p448/bin/ruby extconf.rb checking for main() in -lpthread... yes checking for main() in -lobjc... yes creating Makefile make compiling accessor.cc compiling array.cc compiling backref.cc backref.cc: In member function ‘v8::Handle<v8::Value> rr::Backref::toExternal()’: backref.cc:35: error: ‘Wrap’ is not a member of ‘v8::External’ make: *** [backref.o] Error 1 Gem files will remain installed in /Users/rms/.rbenv/versions/1.9.3-p448/lib/ruby/gems/1.9.1/gems/therubyracer-0.11.2 for inspection. Results logged to /Users/rms/.rbenv/versions/1.9.3-p448/lib/ruby/gems/1.9.1/gems/therubyracer-0.11.2/ext/v8/gem_make.out An error occurred while installing therubyracer (0.11.2), and Bundler cannot continue. Make sure that `gem install therubyracer -v '0.11.2'` succeeds before bundling.
何スかこれ。とりあえず手動で gem install してみましたが挙動変わらず。記述を以下にしてみるか。
gem 'therubyracer', :platforms => :ruby
を、できた。これ、元リポジトリに盛り込んでおきたいのだけれど、どうすりゃ良いのかな。
閑話休題
ローカルな DB の用意をして試験を実行。
$ bundle exec rspec spec Rack::File headers parameter replaces cache_control after Rack 1.5. /Users/rms/Dropbox/kbc/RubyonRailsTutorial3/app/controllers/application_controller.rb:3:in `<class:ApplicationController>': uninitialized constant ApplicationController::SessionsHelper (NameError)
ぐぬぬ。rails c して云々が必要なのだったかな。でもそれって development なナニだしな。つうかこれって SessionHelper が、って SessionHelper が無いぞorz
仕方無いので
一番最新な commit で云々することに。不思議なことに最新には sessions_helper.rb が存在している。どの commit で追加されたか不明。何だそれ。とりあえず始点は app/views/users/new.html.erb ってことにします。掘削開始。
ええと、これって users を POST するって理解で以下な route になるんかな。
users GET /users(.:format) users#index POST /users(.:format) users#create
UsersController の create な action の定義が以下ですね。
def create @user = User.new(params[:user]) if @user.save sign_in @user flash[:success] = "Welcome to the Sample App!" redirect_to @user else render 'new' end end
User なオブジェクトを生成して保存した後に sign_in を呼び出してます。あるいは sigin_in の form はどれにあたるのかな。app/views/sessions/new.html.erb なのか。ここ発の route は以下ってことで良いのかな。
sessions POST /sessions(.:format) sessions#create
つう事は SessionsController の create な action になるのかどうか。定義が以下。
def create user = User.find_by_email(params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) sign_in user redirect_back_or user else flash.now[:error] = 'Invalid email/password combination' render 'new' end end
こちらは登録済みのはずなので find して認証云々なのか。ただ、今日拝見させて頂いたところでは SessionsController#create からは sign_in は呼び出されていました。
ここまでパースというか掘削する方法は当人な方々に話をしてさしあげた方が良いかも。
保険
ここまで確認して異常が見当たらない場合、どうするべきか。
- とりあえず現状な branch はリモートに push してもらう
- パスしていない試験がどれだったか分からんぞorz
掘削しつつ、現場デバッグになるのかどうかw