2011-01-04 2 views
32

각 OS마다 서로 다른 종속성이있는 a ruby gem입니다. 나는 명시 적으로 그들 모두를 작성해야 :Rubygems : 플랫폼 별 종속성을 어떻게 추가합니까?

에 맥 OS X : 리눅스에

gem install livereload 

:

gem install rb-inotify livereload 

Windows에서 :

gem install eventmachine-win32 win32-changenotify win32-event livereload 

약간의 gemspec을 약간 팅겨보고 설치할 수 있습니까? ructions는 모든 OS에 대해 일반 gem install livereload처럼 보일까요?

+0

[listen] (https://github.com/guard/listen) gem에서 플랫폼 별 종속성을 처리하는 방법을 확인하는 것이 좋습니다. [rb-inotify] (https://github.com)/nex3/rb-inotify) 및 [rb-fsevent] (https://github.com/thibaudgg/rb-fsevent)를 참조하십시오. – skalee

답변

20

올바른 방법은 here입니다. gemspec은 패키지 시간에 평가되므로 기본 확장에서 gemspec을 수행해야합니다. 걱정하지 마라, 그저 Ruby 코드 (C 또는 아무것도 컴파일하지 않음) 이후로 무서운 것은 아니다.

우리는 현재 OpenShift (source)에 대한 일부 클라이언트 도구에이 방법을 사용하고 있습니다. 그런 다음 gemspec/Rakefile에서 종속성을 추가하는 대신 확장을 추가합니다. 이 작업을 수행하려면 파일의 이름을 ext/mkrf_conf.rb으로 지정해야합니다.

+0

소스 링크가 작동하지 않습니다. 또한 : 단순히 모든 보석을 Gemspec의 종속물로 추가 할 수 없으며 플랫폼을 기반으로해야합니다. (RbConfig :: CONFIG [ 'target_os'] = ~/freebsd/i')' – Automatico

+2

@ Cort3z의 경우 'gemname'이 필요합니다. 당신이 설명하는 솔루션은 작동하지만, 설치 한 후 특정 OS에 ** 보석 종속성을 사용하지 않는 ** 문제를 해결합니다. 원래의 문제는 ** 종속성을 전혀 설치하지 않은 ** 것입니다. – i4niac

+0

내 예입니다. 필자는 iOS, Android 개발 및 기타 작업에 사용되는 쉘 및 루비 스크립트를 결합한 사내 개발 도구 세트를 보유하고 있습니다. 그것은 모두 루비 보석으로 싸여 있습니다. iOS의 경우 _xcodeproj_, _cocoapods_, _calabash-cucumber_와 같은 의존성이 있습니다. Xcode 커맨드 라인 도구, iOS 시뮬레이터 및 다른 것들이 필요하기 때문에 이러한 보석은 OSX 이외의 다른 OS에는 설치되지 않습니다. 하지만 여전히 Android 스크립트를 사용하기 위해 Linux에 보석을 설치할 수 있기를 원합니다. Linux에서 iOS 도구를 사용하지는 않지만 설치되지 않은 것이 중요합니다. – i4niac

관련 문제