2012-02-27 2 views
2

저는 공유하고 싶은 유틸리티 (라이브러리 아님)를 만들고 있습니다. 루비 젬을 포장하는 적절한 방법은 무엇입니까? 모범 사례가 있습니까?어떻게 응용 프로그램을 루비 젬으로 적절하게 패키지합니까?

특히, 사용자가 여러 버전의 종속성을 가질 가능성을 처리하는 방법을 알고 싶습니다. Bundler는 개발 환경에서 우수한 업무를 수행합니다. 최종 사용자 응용 프로그램에 해당하는 항목이 있습니까? gemspec을 사용하면 자동으로 모든 지정된 보석의 올바른 버전이 필요합니까?

나는 패키지를 다 실행 가능한 것으로서 해결책을 알고 있지만이를 피하고 싶습니다. 나는 사용자가 gem install my_utility을 발행하고 올바른 의존성을 가진 최신 버전을 얻을 수 있어야하고 여전히 정상적인 환경을 가지고 있어야한다고 생각한다.

답변

2

gemspec 파일을 사용할 때 올바른 버전의 보석 의존성을 얻는 것이 가장 큰 문제인 것처럼 보입니까? 맞습니까?

Gem::Specification.new do |spec| 
    # ... 
    spec.add_dependency "json", "= 0.4.0" 
end 

: 당신이 이런 종류의 시도 json으로 버전 1.5.4을 사용하고자하는 경우

Gem::Specification.new do |spec| 
    spec.name   = "hello_world" 
    spec.version  = "0.1.0" 
    spec.author  = "Bilbo Baggins" 
    # Here's a gem dependency 
    spec.add_dependency "json", ">= 0.4.0" 
end 

:

음, 여기에 전형적인 gemspec 파일의 예 이렇게하면 지정된 버전이 이미 설치되어 있는지 확인하지만 실제로 로드을 유틸리티에서 수행 할 수 있습니다.

gem "json", "= 0.4.0" 
require "json" 
+0

제 코드에서는 표준 라이브러리'require'를 사용하여 라이브러리를로드합니다. gemspec 만 사용하면 사용자가 여러 버전이 있거나 최신 버전의 보석을 사용하더라도 지정된 버전이 필요한지 확인할 수 있습니까? 개발자로서 RVM 젬 세트를 사용하여이 문제를 다루지 만, 다른 사람들에게 그것을 강요하고 싶지는 않습니다. –

+0

그래, 그게 내 말이 맞아,하지만 사실은 사실이 아닌 것 같아.하지만 좋은 소식이야 : 이것을 쉽게 할 수있는 방법이 아직도있다! 지금 당장 대답을 업데이트하겠습니다. – Jwosty

+0

+1, 감사합니다. 필자는'require '대신'gem' 메소드가 있었기 때문에 루비 젬과의 빡빡한 결합을 초래할 것이므로 그것을 피했다. 나는이 전화를 격리 할 수있는 좋은 곳을 찾으려고 노력하고있다. 명확히하기 위해 라이브러리를 정확히 _load하지는 않을 것이고, 올바른 버전이'require'd 될 때만로드 될 것입니다. 맞습니까? –

1

보석 개발에는 bundler을 사용할 수 있습니다.

+0

예, 그렇지만 사람들에게'bundle exec'을 내 앱에 넣고 싶지는 않습니다. 로드 시간 동안 보석 버전을 잠그는 방법이 필요합니다. –

+1

gem 사용자는 bundler를 사용할 필요가 없습니다. gemspec 및 종속성 설정 및 보석 버전 관리를위한 bundler rubygems 인터페이스. –

관련 문제