최근에 Ruby를 업데이트하고 여러 프로젝트를 업그레이드하면서, 이전까지 몰랐던 RubyGems의 꽤 유용한 기능들을 발견하게 됐습니다. 알아두면 반복적인 번거로움을 크게 줄여주는 팁들이니 하나씩 살펴보겠습니다.
실행 파일이 구버전을 가리킬 때
저는 예전에 rvm으로 Ruby 버전을 관리했습니다. 하지만 마지막으로 개발 환경을 세팅할 때는 rvm 없이 써보기로 했습니다. Bundler가 있으면 Gemset이 필요 없고, Homebrew로도 Ruby를 최신 상태로 유지할 수 있기 때문입니다.
이 방식은 잘 작동합니다. Ruby를 업데이트하기 전까지는요. 그 순간 rails new, bundle install 같은 명령어들이 전부 고장 나버립니다. 방금 설치한 새 버전이 아니라 예전 Ruby 버전을 계속 가리키게 되는 거죠.
젬(gem)을 하나하나 지웠다가 다시 설치하면 해결되지만, 그건 너무 비효율적입니다. 대신 gem pristine을 사용해 보세요:
gem pristine --all --only-executables
gem pristine은 해당 젬을 처음 다운로드했던 상태로 되돌려 줍니다. 젬을 삭제했다가 다시 설치한 것과 같은 효과죠. (디버깅하면서 젬 코드를 수정해 두고 원래대로 되돌리는 걸 잊었을 때도 유용합니다.)
--all은 "모든 젬"을 의미하고, --only-executables는 "/usr/local/bin/rails, /usr/local/bin/bundle 같은 파일만 초기화"한다는 뜻입니다. 즉, 커맨드 라인에서 젬을 실행할 때 쓰는 스크립트만 골라서 고친다는 거죠.
결국 이 명령어 하나면 /usr/local/bin/rails 같은 파일들이 젬을 완전히 재설치한 것과 동일한 상태가 됩니다.
1분 후면 다시 앱 개발에 집중할 수 있습니다.
특정 구버전이 필요할 때
respond_to 관련 글을 쓸 때, 내용을 제대로 이해하기 위해 아주 작은 앱들을 여러 개 만들어 봤습니다. Rails 버전별로 respond_to와 respond_with가 어떻게 처리되는지 확인하려고 여러 버전을 사용했죠.
각 Rails 앱을 원하는 버전으로 생성하려면 어떻게 해야 할까요? 굳이 이렇게 할 필요는 없습니다:
gem install rails -v 4.0.0
rails new respond_to_4.0
gem uninstall rails
gem install rails -v 4.1.0
rails new respond_to_4.1
gem uninstall rails
더 간단한 방법이 있습니다. 밑줄(언더스코어)을 사용하면 커맨드 라인에서 바로 실행할 버전을 지정할 수 있습니다:
rails _4.0.0_ new respond_to_4.0
rails _4.1.0_ new respond_to_4.1
젬 설치와 삭제를 반복할 필요 없이, 한 줄로 끝납니다.
버전 범위로 유연하게 설치하기
하지만 위 방법에도 아직 문제가 남아 있습니다. 사실 정확히 4.0.0을 설치하고 싶은 게 아니죠. 마이너 업데이트가 모두 포함된 4.0대의 최신 버전을 원하는 겁니다.
그런데 Rails 4.0의 최신 마이너 버전이 몇인지 기억하시나요?
찾아보는 방법은 여러 가지지만, RubyGems가 알아서 처리해 줄 수 있는데 굳이 검색할 필요가 있을까요?
gem install rails -v "~>4.0.0"
Bundler에서 익숙하게 쓰던 모든 버전 문자열을 그대로 사용할 수 있습니다:
gem install rails -v ">3.1, <4.1"
정말 유용합니다! 특히 저처럼 컴퓨터가 사람보다 더 잘하는 일을 직접 하기 싫어하는 분이라면 더욱 그렇죠.
하지만 이걸 다 외울 필요는 없습니다
솔직히 말하면, 저도 이런 문제에 부딪혔을 때 쉬운 해결책이 있다는 걸 몰랐습니다. 다만 "분명 더 좋은 방법이 있겠지"라고 짐작할 수는 있었습니다.
위에서 본 모든 상황은 스스로 해결할 수는 있지만, 반복적이고 귀찮은 작업들입니다.
그리고 이렇게 반복적이고 귀찮은 작업을 발견했다면, 특히 널리 쓰이는 프로젝트에서라면, 둘 중 하나를 의미합니다:
- 누군가 이미 자동화해 놨거나,
- 많은 사람들이 당신이 자동화해 주기를 바라는 경우.
따라서 단순 반복 작업에 매달리기 전에 조금 더 깊이 파보세요. 몇 분만 조사해 봐도 시간 낸 값은 충분히 합니다.
이 글은 원래 뉴스레터 구독자에게만 공개된 내용입니다. 매주 금요일 이런 글을 받아보고 싶다면 여기서 신청하세요!