2010-12-02 3 views
14

한 응용 프로그램에서 두 가지 버전의 gem을 사용할 수 있습니까? 나는 함께 작동하도록 두 개의 레일 플러그인을 사용하려고 해요 :동시에 2 가지 버전의 gem을 사용하십시오.

    ,
  1. OmniAuth 여러 잘 통해 사용자 로그인의 OAuth에 의존 (~> 0.3.5)가 Pengwynn의 링크드 인 https://github.com/pengwynn/linkedin 링크드 인 API 호출에
  2. 단지 번들 업데이 트를 시도

    $ rails server 
    c:/Ruby187/lib/ruby/gems/1.8/gems/bundler-1.0.7/lib/bundler/resolver.rb:129:in `resolve': Bundler could not find compatible versions for gem "oauth": (Bundler::VersionConflict) 
        In snapshot (Gemfile.lock): 
        oauth (0.4.4) 
    
        In Gemfile: 
        linkedin depends on 
         oauth (~> 0.3.5) 
    
    Running `bundle update` will rebuild your snapshot from scratch, using only 
    the gems in your Gemfile, which may resolve the conflict. 
    

    : 내가 레일에 뭔가를하려고 할 때 알려진 웹 사이트는, 내가이 오류 메시지가 OAuth를 0.4.0

에 대한 종속성이 내 터미널이 얼어 버린다

두 플러그인을 동시에 사용할 수 있습니까?

답변

11

하나의 보석을 두 가지 버전으로 사용한다는 것은 일반적으로 동일한 클래스의 두 가지 버전을 사용한다는 의미입니다.

이 보석을 수정하지 않으면 불가능합니다. 생성 된 클래스를 일부 모듈에 배치하고 다른 클래스로 가져온 메소드의 충돌을 해결할 수 있습니다. 일반적으로, 그것은 쉬운 일이 아니며, 보통 효과는 그만한 가치가 없습니다.

해야 할 경우은 보석 유지 관리자에게 종속성을 업데이트하거나 직접 시도하도록 요청하는 것입니다.

아마도 이러한 보석 중 하나를 의존성이 동일한 버전으로 다운 그레이드 할 수 있습니다 (이전 버전 사용).

+0

감사를 통해 해결, 내가 지금 모두를 사용하려고 시도와 귀찮게 중지됩니다. –

2

Unfortunatelly, 루비 유일한 방법은 수정 (! 원문)에 그 보석, 그래서 그들은 호환 의존성

일반적으로

, 이러한 상황을 루비 복잡한 소프트웨어를 구축하고 가진 우리가 사용 - 루비 개발자 - 많이 할 수 없어. 그리고 Ruby의 개발은이 문제에도 초점을 맞추어야하기 때문에 이것은 정말로 나쁩니다.

고객에게 새로운 기능이나 변경 요청을 제공하는 대신, "gem hell"이라고 불리는 Ruby와 함께 살아야합니다.

"보석 지옥"의 또 다른 주요 특징은 최신 보석 방출이 항상 좋은 것은 아니라는 것입니다.

  • 종종 보석은 의미 론적 버전 정책을 따르지 않으며 주요 API 수정 사항을 도입 할 수 있습니다.
  • 종종 새로운 보석 릴리스는 이전에 작동하는 기능에 새로운 버그를 도입 할 수 있습니다.

다른 프로그래밍 언어에는 이러한 유형의 문제를 처리 할 수있는 옵션이 있습니다. "java 같은 버전의 여러 버전"을 검색하면 많은 리소스를 찾을 수 있습니다.나는 응용 프로그램의 작은 종류 제안 할 수 있습니다 무엇

가로 :

  • 최근까지 모든 최신 보석 '출시
  • I 응용 프로그램의 큰 종류 제안 할 수 있습니다 무엇

와, 위의 옵션을 사용할 수없는 경우 :

  • 응용 프로그램을 여러 개의 작은 응용 프로그램, 서비스로 나눕니다. 이렇게하면 분리되어 "보석 지옥"위험을 줄일 수 있습니다. 그것이 일어난다면, 모든 사람들에게 일어날 가능성은 없습니다. 다른 앱에서도 서로 다른 보석 버전을 사용할 수 있습니다. 이론적으로 - - 이러한 문제가 될 수 있습니다 JRuby를에

  • 스위치 자바의 기능 답변에 대한

+0

당신은 jruby가 어떻게 도움이 될 수 있는지 지적 해 주시겠습니까? JRuby로 전환하십시오. 이러한 문제는 이론적으로 Java 기능을 통해 해결할 수 있습니다. – whizcreed

+0

Tomasz, 제발 내 가장 최근의 질문을보십시오 : https://stackoverflow.com/questions/28233471/unable-to-use-surveyor-gem 어쩌면 내 지옥은 비교적 관리 할 수 ​​있습니다 .. – whizcreed

+0

자바에서 하나는 사용자 정의 클래스 로더를 가질 수 있습니다 . 즉, 같은 클래스의 여러 버전을로드 할 수 있습니다. 이것은 이론입니다. 이 아이디어를 실제로 사용하지 못했습니다. OSGi가 있었지만, 분명히 이것은 다른 Java 표준을 위해 폐기되었습니다. 그리고 JRuby는 내가 바라는 두 가지 방법이 혼합되어 있기 때문에 - 길을가는 사람이 있는지 확실하지 않지만 ... –

관련 문제