devise에서 sign_out시 서버가 기절할 경우. (Ruby Or Rails Bug인듯)

내용추가.
이리저리 좀 더 상황을 지켜보니.. 
Devise의 문제가 아니라 Ruby 1.9.2 or Rails 3.1의 버그인것 같다.
path를 못찾는 경우 에러를 내지 않고, 끝까지 찾는다. 끝까지!

-------------------------------

Devise를 붙이고 sign_out을 했는데 반응이 없다.
그러다가 몇초 후 내 맥도 반응이 없다.
Activity Monitor를 띄워보니, ruby 메모리 사용이 1.8G
응? 
1.8G?

내눈을 의심하고 다시 봤는데 1.8G
가운데 .(점)만 빼면 욕이 되는 1.8G.. 
ㅡ.,ㅡ;


처음에는 84MB

Screen shot 2011-06-14 at 오후 2.21.14

 sign_out누르니깐 몇초만에 1GB 돌파!!!

Screen shot 2011-06-14 at 오후 2.22.08

그대로 내비두면 4GB 메모리를 다 잡수실 기세라서 1GB넘는 시점에서 강제종료 해버렸다.


뭐가 문제인지 이리저리 추적을 해보니..
destroy 액션(sign_out)에서 
1 sign_out_and_redirect

요 녀석이 의심스러워 이리저리 해보니, 역시나 이 녀석이 범인이었다.

문제는 redirect시 :root_path로 redirect하게 될 때가 있는데, 이때 :root_path를 찾지 못해 생기는 버그였다.
해결책은 크게 2가지가 있다.

1. :root_path를 만들어 주는 방법.
:root_path가 없어서 생기는 버그임으로, :root_path를 만들어 주면 된다.
routes.rb에 가서 주석처리된 
1 # root :to => 'welcome#index'

을 주석을 풀어주고, :to는 각자의 상황에 맞게 수정을 해주면 된다.
1 root :to => 'getAway#Hi'


2. sign_out과 redirect를 따로따로.
1 sign_out_and_redirect

이 녀석이 하자다보니, 이 녀석을 안써버리면 그만이다.
직접 sign_out 시키고 상황에 맞게 redirect 하면 된다.
1 sign_out
2 redirect_to "넌 이미 아웃되었다."


만세!


ps.
devise에 초간단무식영어로 bug reporting을 해놓긴 했는데..
과연 그들이 알아들을 수 있을지는 미지수.
설마 나의 초간단무식영어를 찾는 사람은 없겠지?


  • 어쩌면 rails3.1 rc1의 버그일수도.
    • hiphapis 아.. rails 3.1이 범인일 확률이 더 높겠네요 11 전
  • 전 아직 촙오라 저런애들 직접 맹글어 주고 있는데 영 불편하네요 ㅠ 누가 뭔가 알려주긴햇는데 그걸 보면서 느낀건 '그래서 어떻게 쓰라는건데~!'
    • hiphapis 헐. 직접 만들어 쓰시는게.. 더 고수신데 -ㅛ-;;;;;;;;;;;;;;;;;; 11 전
    • moonrc 원래 모르면 손발이 고생하는거자나용.. ㅠㅠ 11 전
    • hiphapis 고수가 좀 그래요. 고수님!! ㅎㅎ 11 전
  • 그러니깐. 차라리 에러나면서 죽던가;;

    저런식으로 혼자 삐지면 낭패인데 ㅋㅋㅋ
    • hiphapis 그르니간요. 소심한 녀석 같으니라규.. 그나저나 코멘트 1등 축하드려요. 11 전
로그인 회원가입