Используйте 2 версии гема одновременно - PullRequest
17 голосов
/ 02 декабря 2010

Могу ли я использовать две версии драгоценного камня в одном приложении? Я пытаюсь использовать два плагина rails для совместной работы:

  1. LinkedIn Пенгвинна https://github.com/pengwynn/linkedin для вызовов API LinkedIn, зависит от oauth (~> 0.3.5)
  2. OmniAuth для входа пользователя через несколько известных веб-сайтов, зависит от oauth 0.4.0

Когда я пытаюсь что-то в рельсах, я получаю это сообщение об ошибке:

$ 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.

Попытка обновления пакета просто останавливает мой терминал

Можно ли использовать оба этих плагина одновременно?

Ответы [ 2 ]

12 голосов
/ 02 декабря 2010

Использование двух версий одного камня обычно означает: использовать две версии одного и того же класса.

Это невозможно без внесения изменений в эти камни.Вы можете попытаться поместить созданные классы в некоторый модуль, разрешить конфликты в методах, импортированных в другие классы, и так далее.В общем, это непростая задача, и обычно эффект этого не стоит.

Что вы должны сделать в таких случаях, это попросить, чтобы сопровождающие гемы обновили зависимости, или попробуйтесделать это самостоятельно.

Возможно, вы можете понизить (использовать более старую версию) один из этих драгоценных камней до версии, в которой зависимости были одинаковыми.

3 голосов
/ 20 сентября 2014

К сожалению, в Ruby единственный способ - исправить (sic!) Этих драгоценных камней, чтобы они использовали совместимые зависимости

В общем, при создании сложного программного обеспечения на Ruby и в такой ситуации мы, разработчики Ruby, не можем многого сделать. И это действительно плохо, так как разработка в Ruby должна сосредоточиться и на этой проблеме.

Вместо того, чтобы предоставлять вашему клиенту новые функции или запросы на изменение, нужно жить с так называемым Ruby: «драгоценный ад».

Еще одна важная характеристика "драгоценного ада" заключается в том, что не всегда последний выпуск драгоценного камня является хорошим.

  • Зачастую гем не следует политике семантического контроля версий и может вносить значительные изменения в API.
  • Зачастую в новой версии gem могут появиться ошибки в ранее работавших функциях.

Другие языки программирования имеют возможность обрабатывать проблемы такого типа. Просто найдите «несколько версий Java одного и того же класса», и вы найдете много ресурсов.

Что я могу предложить для небольших приложений:

  • будьте в курсе всех последних выпусков драгоценных камней

Что я могу предложить для более крупных приложений, когда выше не вариант:

  • разделите ваше приложение на несколько небольших приложений, сервисов. Это разделит их, сделав риски того, что «драгоценный ад» станет меньше. Если это произойдет, скорее всего, это случится не со всеми. Также разные приложения могут использовать разные версии гемов.

  • переключиться на JRuby, где эти проблемы - теоретически - могут быть решены с помощью возможностей Java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...