Gemfile
에서 사용 가능한 모든 옵션과 각 옵션의 상세한 사용법은
매뉴얼에 나와 있습니다.
Gemfile 매뉴얼
Gemfile에는 최소한 하나의 gem 소스가 필요합니다. gem 소스에는 루비젬스
서버가 URL 형식으로 적혀있어야 합니다. bundle init
을
실행함으로써 rubygems.org를 소스로 한 기본 값의 Gemfile을 만듭니다. 할
수만 있다면 https
를 사용하여 rubygems.org 서버로의 연결이 SSL
인증되도록 하세요.
source 'https://rubygems.org'
여러 전역 소스를 추가하는 것은 가능하지만 번들러 1.7에서는 권장하지
않습니다. 이 소스들은 끝에서 처음 순으로 검색됩니다.
어떤 gem 소스는 사용자 이름과 비밀번호가 필요합니다. 이를
위한 사용자 이름과 비밀번호를 설정하려면 bundle config
를
사용하세요. 이 명령어는 Gemfile이 설치되는 각 컴퓨터에서 한 번은 실행해야
하지만, 버전 관리 시스템에 평문으로 인증 정보를 저장하지 않도록 합니다.
$ bundle config https://gems.example.com/ user:password
Gemfury 회사 계정 같은 어떤 소스는 인증을 Gemfile 안의 소스 URL의 일부로
포함시키는 것이 더 간단할 수도 있습니다.
source "https://user:password@gems.example.com"
소스 URL 내의 인증은 config
로 설정된 인증보다 우선됩니다.
필요한 gem을 버전 번호와 함께 선언합니다. 의존성을 지원하기 위한 버전
지정에는 루비젬스에서 사용하는 것과 같은 문법을 사용합니다.
gem 'nokogiri'
gem 'rails', '3.0.0.beta3'
gem 'rack', '>=1.0'
gem 'thin', '~>1.1'
>= 1.0
같은 대부분의 버전 지정자는 따로 설명할 필요가 없습니다.
~>
지정자는 특별한 의미가 있습니다. 예제로 설명하겠습니다.
~> 2.0.3
는 >= 2.0.3
과 < 2.1
를 함께
사용한 것과 같습니다. ~> 2.1
은 >= 2.1
과
< 3.0
을 함께 사용한 것과 같습니다. ~> 2.2.beta
는
2.2.beta.12
같은 사전 릴리스 버전과 일치합니다.
루비젬스 버전 지정자
gem의 메인 파일이 gem의 이름과 다르다면, require하는 방법을 지정할 필요가
있습니다.
gem 'rspec', :require => 'spec'
gem 'sqlite3'
:require => false
를 지정함으로써 번들러가 gem을 require하는
것을 방지할 수 있습니다. 하지만 여전히 설치와 의존성의 유지보수는
이루어집니다.
gem 'rspec', :require => false
gem 'sqlite3'
Gemfile
안의 gem을 require하려면, 애플리케이션에서
Bundler.require
를 호출할 필요가 있습니다.
자세한 내용은: Bundler.require
어떤 gem을 사설 gem 서버에서 가져와야 한다면, 이 기본 값 소스는 해당
gem에서 덮어쓸 수 있습니다.
한 gem을 가지고 있는 gem 서버를 위한 가장 간단한 방법은 그 gem에만
:source
옵션을 사용하는 것입니다.
gem 'my_gem', '1.0', :source => 'https://gems.example.com'
같은 서버에서 여러 gem을 받아야 한다면, source
블록을 사용해
그룹지을 수 있습니다.
source 'https://gems.example.com' do
gem 'my_gem', '1.0'
gem 'another_gem', '1.2.1'
end
gem 서버의 인증은 위에 설명한 것처럼 URL의 안이나 bundle
config
를 사용해 지정할 수 있습니다.
git 저장소도 유효한 gem 소스입니다. 저장소가 하나 이상의 유효한 gem을
가지고 있다면 말이죠. :tag
나 :branch
,
:ref
로 어느 걸 체크아웃할지 정할 수 있습니다. 기본 값은
master
브랜치입니다.
gem 'nokogiri', :git => 'https://github.com/tenderlove/nokogiri.git', :branch => '1.4'
git 저장소가 .gemspec
파일을 가지고 있지 않다면, 번들러가
의존성, 실행 파일, C 확장 설정이 없는 간단한 .gemspec
파일을
생성합니다. 아마도 간단한 gem에서는 동작할 테지만, 동작하지 않을 수도
있습니다. .gemspec
파일이 없다면 git에서 gem을 사용하지 않는
것이 좋습니다.
자세한 내용은: git
파일 시스템에서 직접 gem을 언팩하고 싶다면, :path
옵션에 gem의
파일이 들어있는 경로를 지정하면 간단합니다.
gem 'extracted_library', :path => './vendor/extracted_library'
여러 로컬 gem을 파일 시스템에서 직접 사용하려 한다면, 전역 `path` 옵션에
gem의 파일이 들어있는 경로를 설정할 수 있습니다. 이렇게 하면 하위
디렉터리에서 gemspec 파일을 자동으로 로드합니다.
path 'components' do
gem 'admin_ui'
gem 'public_ui'
end
의존성은 그룹 안에 있을 수 있습니다. 그룹은 설치 시에
무시(--without
을 사용)하거나 한 번에
require(Bundler.require
를 사용)할 수 있습니다.
gem 'wirble', :group => :development
gem 'debugger', :group => [:development, :test]
group :test do
gem 'rspec'
end
자세한 내용은: 그룹
Gemfile
에 ruby
를 사용하여 필요한 루비 버전을
지정할 수 있습니다. Gemfile
이 다른 루비 버전에서 로드
되었다면, 번들러는 설명과 함께 예외를 발생시킬 것입니다.
ruby '1.9.3'
이것이 의미하는 것은 1.9.3과 ABI 호환이 있는 루비 VM에 의존성이 있다는
것입니다. 버전을 확인해 맞지 않으면, 번들러는 예외를 발생시킵니다. 이것은
실행 중의 코드가 매치하는지 확인합니다. :engine
과
:engine_version
버전 옵션을 사용해 좀 더 자세한 설정을 할 수
있습니다.
ruby '1.9.3', :engine => 'jruby', :engine_version => '1.6.7'
자세한 내용은: 루비 지시자