루비는 GEM이라는 재미난 형태의 패키지 기능을 제공한다. 자바의 jar와 비슷한 개념이기도 한데 특이한건 만드는 방법에 따라 Gem이 라이브러리로 쓰이기도 하고 실행가능한 어플리케이션이 되기도 한다. 만들기도 쉽고 사용하기도 쉽다.
애당초 루비 개발을 시작할때 디렉토리 구조를 Gem구조로 가져가는것이 속편하고 좋다.
1. gem을 위한 기본 소스 디렉토리 구성
“source root” —- bin
|– lib
|– ${gemname}.gemspec
- bin에는 실행가능한 루비 소스 파일들을 배치한다. 실행 가능해야하니 rb파일 첫줄에 쉬뱅 라인을 넣는 것을 잊지 말자
( 리눅스 환경에서는 #!//usr/bin/env ruby 가 일반적이다. ) - lib에는 라이브러리로 쓰이는 루비 소스 파일들을 배치한다. 대부분 개발 파일들이 이 디렉토리에 위치한다. (실행파일들 빼고~)
- ${gemname}.gemspec , gem을 빌드할때 참조하는 스펙 파일. 요건 다음 항목에서 상세히…
2. gemspec 작성
gem build시 참고하는 spec파일, 만들어질 gem file들에 대한 정보를 포함하고 있다.
아래는 최근에 개발한 uasge_collector 라는 젬 파일의 usage_collector.gemspec 파일 내용
——- usage_collector.gemspec ————–
require ‘rubygems’
Gem::Specification.new do |s|
s.name = ‘cloulu_usage_collector’ # gem list 에 표기되는 gem name
s.version = ‘0.1.0’ # gem version 표기
s.date = ‘2013-04-05’
s.summary = “CloudFoundry DEA Usage Collector” # gem list에 표기되는 gem 설명
s.description = “A Cloulu project’s Component developed to collect cpu usage of CloudFoundry’s DEA Apps”
s.authors = [“abh0518”]
s.email = ‘abh0518@gmail.com’
s.bindir = ‘bin’ # 실행 파일이 위치한 디렉토리
s.executables = [‘usage_collector’] # 실행 파일 목록, 배열 형식으로 나열
s.files = Dir.glob(“**/**/**”) # 젬에 포함되는 파일들, Dir.glob(“**/**/**”) 는 모든 파일들을 포함시켜 버린다.
s.homepage = ‘http://www.facebook.com/abh0518’
end
————————————————————–
3. gem 만들기
gem build에 2에서 작성한 spec파일 path를 파라메터로 넘겨준다.
>> gem build ${gemspecfile path”}
4. gem 설치
3이 완료되면 드더에 gem으로 만들어진 파일을 얻을 수 있다. 간단히 설치해보자
>> gem install “gem file name”
5. gem 설치 확인
>> gem list
6. 기타 gem 명령어들 (잊지 않기위해 일단 나열만 해놓음)
- gem list # 설치된 젬 리스트 표시
- gem environment # 루비 젬 설정 환경 표시
- gem update ${gem name} # 지정한 젬 업데이트
- gem update # 모든 젬 업데이트
- gem update –system # Ruby Gem 자체를 업데이트
- gem uninstall ${gem name} # 설치한 젬 제거