Design & Development

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 :only => [: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’ 로 공부한다면 책 샘플과 관련된 토론이 진행되는 아래 위키 사이트를 꼭 방문해 보시길.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s