레일 3.1을 개발 중이며 기본 uglifier 애셋 gem을 사용하고 있습니다. 이 젬은 자바 스크립트 런타임이 필요한 execj에 의존합니다. 나는 Mac OSX에서 개발하므로 문제가 생기지 않습니다. 다른 개발자는 기본적으로 JavaScript 런타임이없는 Linux를 사용합니다. Ruby에 내장 된 JavaScript 런타임 인 therararacer를 사용하면 꽤 잘 작동하지만 Bundler가 시스템이 Linux 인 경우에만 설치하는 것이 좋습니다. Gemfile에서 이것을 지정하여 Mac에서만 설치할 수 있도록 할 수 있습니까?번들러는 보석 설치를 특정 운영 체제로 제한 할 수 있습니까?
4
A
답변
6
할 수 있습니다.
gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i
보석 및 플랫폼을 적절한 것으로 바꾸십시오.
3
이 접근법의 문제점은 OS X 시스템이 Gemfile.lock을 업데이트하면 보석이 포함된다는 것입니다. 종속성을 계산할 때 bundler가 gem을 포함하지 않으므로 다른 개발자가 gemfile의 gem을 업데이트하면 문제가됩니다.
이러한 유형의 문제를 해결하는 나의 접근 방식은 수동으로 내가 원하는 보석을 설치 한 다음 필요로하는 것이 었습니다모두 :
가begin
require 'os-x-gem'
rescue LoadError
end
begin
require 'linux-gem'
rescue LoadError
end
+0
에 주목할 가치가있다. 사용자가 리눅스에서'require "os-x-gem"으로 실패하면로드 오류가 발생하고 Linux 보석이 필요하지 않습니다. 두 보석 모두 구출 블록이 필요합니다. – rubish
+0
훌륭한 점, 나는 그것을 놓쳤다. 이 문제를 해결하기 위해 예제를 업데이트했습니다. –
이 여전히 그렇지 않은, 보석을 설치? 나는 리눅스가 아니라면'번들 설치 '중에 그것을 건너 뛰는 방법을 찾고있다. –
@Jonathan C. 생각하지 않습니다. 시도해 보셨습니까? – rubish
@rubish 예, 여전히 설치됩니다. ': require => false'는 런타임에 번들러가 라이브러리를 요구하지 못하도록하기 위해서만 사용됩니다. 즉, 직접 코드에서 필요합니다. –