2 камням нужны разные версии одной и той же зависимости

Используя Rails 3, я пытаюсь понять, что, по-моему, должно быть довольно простым...

У меня есть 2 драгоценных камня, которые требуют 2 разных варианта одной и той же зависимости от драгоценных камней. Обе версии зависимого gem установлены в моей системе, но я все еще получаю сообщение об ошибке Rails: "Bundler не смог найти совместимые версии для gem XXX".

Какова наилучшая практика для обработки такого сценария?

Ответ 1

Я бы выбрал то, что предлагает @BaroqueBobcat. Я просто хочу добавить это - если вам нужен последний камень в Twitter и не может дождаться, когда сопровождающий Groupon2 обновит свой драгоценный камень - вы можете разблокировать Groupon2 на GitHub, обновить его gemspec, посмотреть, все ли работает, выполнив его тесты (и попытайтесь исправить это, если это не так) и включите свою собственную версию, используя ее URL Git в вашем Gemfile, например: gem "groupon2",: git = > "https://github.com/yourgithubuser/groupon2.git".

Если вы хотите быть приятным, вы можете предложить свои изменения для сопровождающего Groupon2 с запросом на получение бонусных очков:)

Ответ 2

Если вам не нужны все функции щебетать версии 1.4.1, вы можете использовать версию 1.2.0, которая нуждается в faraday ~ > 0.5.4. и это должно сработать. Если это не так, вы можете попробовать выкрикивая владельца groupon2, чтобы обновить его драгоценный камень - он на github https://github.com/gangster/groupon2 .

Ответ 3

У меня была такая же проблема, но в другом контексте: Написание приложения, которое использует две разные версии зависимости хеши (1.2.0 и 3.1.0)

Я зашел в Gemfile.lock и задал более старую версию в скобках hashie (1.2.0), выполнил установку пакета и работал.

Ответ 4

Если вы находитесь в ситуации, когда драгоценные камни используются в разных проектах или, по крайней мере, не в то же время, вы можете использовать функцию gemset RVM в качестве обходного пути. Недавно у меня была несовместимость драгоценного камня, подобная твоей, и то, что я использовал.

Если у вас установлен RVM, сделайте следующее:

rvm gemset create gemset_name_here
rvm gemset use gemset_name_here

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

На этом этапе вам нужно запустить bundle install или грабли или все, что вы используете, чтобы получить необходимые вам камни, но это должно позаботиться о проблеме.

Итак, когда вы используете gem 1 с зависимостью 1, вы используете gemset, у которого есть требуемая версия. Затем, когда вы используете gem 2 с зависимостью 2, вы переключаетесь на gemset, который имеет это.

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

Ответ 5

Взгляните на это решение, возможно, оно поможет вам: gems

Ответ 6

bundle update разрешить конфликты