개발자는 gem처럼 루비의 의존성도 지정할 수 있습니다.
이렇게 함으로써 애플리케이션이 루비 VM의 특정 기능에 의존하는 경우 빠르게 실패하도록 합니다.
이런 식으로, 배포 서버의 루비 VM이 로컬의 루비와 일치하는지 확인할 수 있습니다.
의존성 지정은 Gemfile
에 ruby
지시자를 사용함으로써 할 수 있습니다.
ruby 'RUBY_VERSION', :engine => 'ENGINE', :engine_version => 'ENGINE_VERSION', :patchlevel => 'RUBY_PATCHLEVEL'
루비 1.9.3을 사용해 JRuby 1.6.7을 사용하고 싶을 때엔, 이렇게 하면 됩니다.
ruby '1.9.3', :engine => 'jruby', :engine_version => '1.6.7'
루비의 패치레벨을 제한하는 것도 가능합니다.
ruby '1.9.3', :patchlevel => '448'
번들러는 현재 실행 중인 루비 VM이 Gemfile
안에서 지정한 루비 버전과 일치하는지 확인합니다.
일치하지 않는다면, 번들러는 일치하지 않음을 설명하는 예외를 발생시킵니다.
Your Ruby version is 1.8.7, but your Gemfile specified 1.9.3
:engine
과 :engine_version
은 선택적입니다.
이 옵션을 생략할 경우, 이 애플리케이션이 특정 루비 ABI와 호환하지만 엔진은 무관하다는 의미가 됩니다.
:engine
을 사용할 경우 반드시 :engine_version
도 지정해야 합니다.
platform
명령어를 --ruby
플래그와 사용할 경우, Gemfile
안에 어떤 ruby
지시자가 지정되었는지 볼 수 있습니다.
ruby 1.9.3 (jruby 1.6.7)
자세한 내용은: bundle platform
ruby
지시자에서, :patchlevel
은 선택적입니다.
패치레벨 릴리스는 보통 호환가능하며 중요한 보안 픽스를 포함하고 있습니다.
패치레벨 옵션은 RUBY_PATCHLEVEL
상수를 확인하며, 지정되어 있지 않으면 그냥 무시합니다.