Rails 초보의 에러 해결 로그 II
Rails 공부해보겠다고 의욕적으로 무작정 최신 버전 설치하고 샘플들 따라 하다보면 대략 낭패 – 현재 나와있는 대부분의 Rails 관련 책들이 1.* 기반으로 작성되다 보니 Rails 2.0.* 을 설치했을 경우 Scaffold 관련한 부분에서 계속 문제에 부딪히게 된다.
가령 ‘Agile Web Development with Rails 2/E – Dave Thomas, David Heinemeier Hanson(역서 : 레일스와 함께하는 애자일 웹 개발-인사이트)’ 의 샘플 테스트할 때 발생하는 에러들을 몇가지 정리해보겠다.
1. undefined method `scaffold’
Rails 2.0.* 대 부터 scafold 플러그인이 빠지면서 발생하는 문제로 다음과 같이 별도로 설치해주면 된다.
ruby script/plugin install scaffolding
ruby script/plugin install svn://errtheblog.com/svn/plugins/classic_pagination
2. ActionController::InvalidAuthenticityToken
Rails 2.0.* 에 CSRF (Cross-Site Request Forgery) 공격을 막기 위한 기능이 포함되며 발생하는 문제( 참고 : http://forum.rubykr.org/viewtopic.php?p=6509 )로 Controller 파일에
protect_from_forgery
nly => [:create, :update, :destroy]
나 CSRF 기능을 끄기 위해
skip_before_filter :verify_authenticity_token
을 추가하면 된다고 한다.( 내 경우에는 첫번째 방식은 잘 안되었고 두번째 방식으로 해결 )
3. ruby script/generate scaffold wrong number of arguments
Rails 2.0.* 에서 REST 기반 개발 방식이 강화되면서 변화된 scaffold 의 지원 방식 때문인 듯하다.
Because of Rails recent conversion to REST, the scaffold generator only generates controllers based on the model name … [참고 : http://www.nabble.com/Rails-2.0-scaffold-td14467684.html]
그래서 1.* 에서 사용되던 다음과 같은 구문은
ruby script/generate scaffold product admin
아래와 같은 식으로 변경해주어야 한다.
ruby script/generate scaffold Product id:int title:string description:text image_url:string char price:decimal
위와 같은 문제들 일일이 해결하다가 지레 지치기 전에 나와 같은 초보에게 권장하고픈 방법은 2.0.* 대 날려버리고 1.2.* 로 다운그레이드하는거.
gem uninstall rails -v 2.0.2
gem install rails -v 1.2.6 –include-dependencies
p.s : ‘Agile Web Development with Rails 2/E’ 로 공부한다면 책 샘플과 관련된 토론이 진행되는 아래 위키 사이트를 꼭 방문해 보시길.
- http://pragprog.wikidot.com/rails-play-time
