'윈도우 XP'에 해당되는 글 1건

  1. 2010.11.14 [Rails] incompatible character encodings: UTF-8 and ASCII-8BIT
Server-Side/Rails2010. 11. 14. 17:10

우분투와 윈도우두개의 OS에서 rails app개발을 하고있는데 유독 윈도우에서 만약 mysql db table안에 한글문자가 포함되있을경우 [incompatible character encodings: UTF-8 and ASCII-8BIT] 와 같은 에러가 났다. 개발할때의 환경은 Windows 7 & Ruby 1.9.2 & Rails 3.0.0 & Mysql 5 이였다. rails 3 로 프로젝트를 c:>rails new project -d mysql 과 같이 생성하면, config/database.yml 속에 adapter 가 mysql2 로 설정되어있다. 뭐 다 좋은데, window에서 이런설정으로 있으면 db의 table안에 한글이 들어있을경우 십중팔구 페이지를 로딩할때 encoding error가 뜬다는 것이다. 한글과 같은 루비 파일 상단에 # encoding: UTF-8 를 넣었음에도 불구하고 말이다. ( mysql2 gem 의 문제인것 같았다. ) 임시방편 해결방안이 있는데  @article.title 이란곳에서 문제가 난다면 @article.title.force_encoding("UTF-8") 형식으로 데이타베이스에서 한글을 불러올때 나는 에러사항을 해결할 수 있다. 하지만 수많은 데이타를 불러오는부분에서 일일이 다 저렇게 할수는 없는방편이고, 이래저래 구글링을하다가 올바른 해결방법을 찾아냈다.

먼저 config/database.yml 파일속에 adapter: mysql2 => adapter: mysql 으로 바꿔버린다.
Gemfile 을 열어서  gem 'mysql2' => gem 'ruby-mysql' 바꾸어 준다.
명령어 bundle install 을 하면 ruby-mysql 이 설치될 것이다. 아니면 gem install ruby-mysql 해도 된다.
서버를 재시작해서 실행해본다. 만약 mysql db에 한글이 포함되있음에도/여러페이지 로딩시 인코딩에러가 안난다면 성공!
만약 [uninitialized constant Mysql::Protocol::UNIXSocket ] 에러가 난다면 config/database.yml 파일을 열어서 host: localhost =>host: 127.0.0.1 로 바꾸어 주어야 한다.

이제 윈도우와 우분투에서 걱정없이 rails를 개발할 수 있게됬다.

Posted by 준피