Можете ли вы иметь несколько версий драгоценного камня в Gemfile? - PullRequest
11 голосов
/ 19 сентября 2011

Что бы я хотел, было бы примерно так:

gem 'rack', '1.3.3', '1.2.4'

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

Ответы [ 3 ]

13 голосов
/ 20 сентября 2011

Нет, вы не можете загружать несколько версий гемов одновременно. Это потому, что, как подчеркнул Кнут, код будет конфликтовать. Откуда гем знает, как использовать 1.2.4 версию Rack, в отличие от 1.3.3 версии Rack? Не может.

Кроме того: для Bundler все зависимости gem должны быть удовлетворены , чтобы завершить процесс объединения. Если у вас есть драгоценный камень, для которого явно требуется Стойка 1.2.4 (т. Е. = 1.2.4 находится в gemspec для этого драгоценного камня), а затем еще один драгоценный камень, для которого требуется версия Rack, такая как >= 1.3, тогда эти Версии gem будут конфликтовать, и Bundler скажет вам об этом.

11 голосов
/ 19 сентября 2011

Вы можете установить интервал разрешенных драгоценных камней

gem 'rack', '<1.3.3', '>1.2.4'

Он загрузит самый актуальный в выбранном интервале.

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

3 голосов
/ 31 декабря 2016

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

gem 'rack', '1.3.3', '1.2.4'

вы можете иметь несколько ограничений !=, чтобы исключить версии, которые вы считаете проблематичными:

gem 'rack', '!= 1.3.0.beta2', '!= 1.3.0.beta'

...