루비(Ruby) 콘솔(IRB, PRY)에서 한글 입력하기

루비(Ruby) 콘솔(IRB, PRY)에서 한글 입력하기

이 글은 한국 루비 커뮤니티의 Advent Calendar 2015의 일환으로 작성했습니다. 이런 이벤트를 빌미로 글도 적게 되고 좋네요 ^^

평소에는 IRB, PRY 에서 한글 입력할 일이 없어서 신경쓰지 않고 있었는데 최근 한글 입력이 필요한 상황이 있어서 다시금 찾아보면서 정리 해봤습니다.

루비(Ruby) 2.0 부터는 기본 인코딩이 UTF-8로 변경 되었는데 왜인지 저는 이걸로 콘솔에서도 기본으로 한글 입력할 수 있다고 생각하고 있었습니다. 완전히 잘못된 생각이었죠.

IRB, PRY에서 한글을(일본어, 중국어등 UTF-8 입력에 모두 적용) 입력하려면 readline이라는 패키지가 필요하고 루비 설치시에 이 패키지를 사용하도록 해야합니다. 이미 루비가 설치 되어 있었다면 다시 컴파일 해야합니다.

readline 패키지 설치 방법은 시스템 별로 다음과 같습니다
Ubuntu:

$ apt-get install libreadline-dev

Fedora:

$yum install readline-devel

Max OS X :

$ brew install readline
$ RUBY_CONFIGURE_OPTS=--with-readline-dir="$(brew --prefix readline)" rbenv install 2.2.0

Ubuntu, Fedora는 루비를 다시 컴파일 하는것까지는 적지 않았는데 상황에 따라 컴파일 하면됩니다. Mac OS X에서는 rbenv를 사용하는 경우 위와 같이 옵션에 readline 경로를 명시해야합니다.

Max OS X에서 새로운 루비 버전을 설치할때마다 옵션을 주는것도 번거롭고 까먹으면 다시 설치해야 하는 상황이 마음에 들지 않았는지 Tim Pope가 이를 자동화 해주는 rbenv plugin을 공개했습니다.  홈 디렉토리의 rbenv 폴더 밑에 플러그인을 체크아웃하는 것으로 설치는 완료됩니다.

git clone git://github.com/tpope/rbenv-readline.git ~/.rbenv/plugins/rbenv-readline

이제부터는  rbenv install 2.2.0 과 같이 입력만 해도 readline 경로가 지정된 상태로 설치됩니다 ^^

이미 설치된 루비 버전을 다시 컴파일 한 경우 기존에 설치된 젬중 일부는 정상작동하지 않는 경우가 발생합니다. 저 같은 경우 아래와 같은 메시지가 출력되었습니다.

Ignoring bcrypt-3.1.10 because its extensions are not built. Try: gem pristine bcrypt --version 3.1.10
Ignoring binding_of_caller-0.7.2 because its extensions are not built. Try: gem pristine binding_of_caller --version 0.7.2
Ignoring byebug-8.2.0 because its extensions are not built. Try: gem pristine byebug --version 8.2.0
Ignoring byebug-8.0.0 because its extensions are not built. Try: gem pristine byebug --version 8.0.0
Ignoring byebug-4.0.5 because its extensions are not built. Try: gem pristine byebug --version 4.0.5
Ignoring curb-0.8.8 because its extensions are not built. Try: gem pristine curb --version 0.8.8
Ignoring mysql-2.9.1 because its extensions are not built. Try: gem pristine mysql --version 2.9.1
Ignoring mysql2-0.4.1 because its extensions are not built. Try: gem pristine mysql2 --version 0.4.1
Ignoring nokogiri-1.6.6.2 because its extensions are not built. Try: gem pristine nokogiri --version 1.6.6.2
Ignoring oj-2.12.12 because its extensions are not built. Try: gem pristine oj --version 2.12.12
Ignoring pg-0.18.3 because its extensions are not built. Try: gem pristine pg --version 0.18.3
Ignoring puma-2.11.2 because its extensions are not built. Try: gem pristine puma --version 2.11.2
Ignoring redcarpet-3.2.3 because its extensions are not built. Try: gem pristine redcarpet --version 3.2.3
Ignoring therubyracer-0.12.1 because its extensions are not built. Try: gem pristine therubyracer --version 0.12.1
Ignoring unicorn-4.8.3 because its extensions are not built. Try: gem pristine unicorn --version 4.8.3

gem pristine 명령어를 이용해 젬을 정리하는것 같은데 하나하나 입력하기 귀찮아서 옵션을 찾던중 gem pristine --all 을 이용하면 위에 언급된 젬 이외에 설치된 모든 젬에 대해서 실행한다는것을 알게 되어 해당 명령어를 이용했습니다. puma 젬 같은경우는 이 명령어를 이용해도 잘 되지 않아 젬을 지웠다가 다시 설치했던거 같은데 시간이 지나서 기억이 정확하지는 않네요;;

참고자료

게시글의 아마존, 쿠팡, iTunes 링크들을 통해 구매를 하시면 제휴(Affiliate) 프로그램에 의해 저에게 일정 금액이 적립될 수 있습니다. ^_____^

Subscribe to Seapy Blog

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
[email protected]
Subscribe