2016-05-22 15 views
1

В моем Gemfile я включаю драгоценный камень, у которого есть .gemspec, который использует пессимистический оператор ~>, чтобы указать версию драгоценного камня. Тем не менее, мне нужно использовать более новую версию драгоценного камня. В моем случае я использую spree 3-0-stable, у которого actionemerchant установлен на '~> 1.47.0' https://github.com/spree/spree/blob/3-0-stable/core/spree_core.gemspec#L22, но мне нужно использовать активный купец ~> 1.59.0 'обновить версию gem, указанную в другой зависимости от жемчужины

Я попытался указать версию 1.59. 0 в моем Gemfile но расслоение жалуется:

Вы запросили: activemerchant ~> 1.59.0

расслоение в настоящее время имеет activemerchant заперто в 1.47.0. Попробуйте запустить bundle update activemerchant

Если вы корректировали несколько драгоценных камней в вашем Gemfile сразу, попробуйте передать их все bundle update

Но команда bundle update activemerchant будет обновлять только 1.47.x.

Что это за рельсы? Помимо форкинга, я сам и обновляю .gemspec? Очевидно, что обновления для драгоценного камня activemerchant могут сломать драгоценный камень. Но я могу проверить свое приложение.

+4

Насколько я знаю, forking spree - единственный способ. –

+0

Я не думаю, что вы можете одновременно использовать две версии одного и того же драгоценного камня в своем приложении. Bundler заставит решить одну версию. –

ответ

0

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

Возможно, что версия activemerchant, которую вы хотите, на самом деле не будет работать с версией, которую вы хотите, она сломает ее. Если это так, нужно будет установить код spree для работы с новой версией activemerchant. Или это может отлично работать с той версией, которую вы хотите, ограничение в spree непредсказуемо неустойчиво, и в этом случае spree gemspec просто нужно было бы изменить, чтобы это разрешить.

Но вы не можете переопределить его, не изменяя веселье gemspec.

Вы можете сделать свою собственную вилку весельчака, в которой вы меняете gemspec - но не зная, действительно ли будет работать с версией Activemerchant, что может быть опасно. И теперь у вас есть своя вилка, поэтому вы не сможете перейти на новые версии spree без слияния их изменений с вашей вилкой и т. Д.

Другое дело, немного странно работать с веткой spree 3-0-stable, вместо фактической выпущенной версии драгоценного камня. Но я не знаком с практикой управления выпуском spree, возможно, это то, что они поощряют? Во всяком случае, изменение этого, вероятно, не решит вашу проблему.

Если ваше приложение относительно новое или простое, вы можете рассмотреть возможность перехода от весны к solidus, вилку весельчака. Солидус разветвлялся на spree 2.x, поэтому миграция из spree 3.x может быть несложной, особенно если ваше приложение установлено и несколько сложное. Хотя solidus_core gem is also locked для activemerchant ~> 1.48.0, поэтому он также не позволит ничего, кроме activemerchant 1.48.x. Команда солидуса довольно отзывчива на свой Slack-канал, если вы хотите спросить их, что с этим связано, если они знают, будут ли работать более поздние версии activemerchant, если зависимость может быть ослаблена. Я обнаружил, что поддерживающие Solidus очень отзывчивы и, вероятно, будут заинтересованы в предоставлении более поздних версий activemerchant, если это возможно.Я не знаком с текущей командой Spree и тем, как они общаются с пользователями (если они имеют слабину или списки рассылки или реагируют на проблемы github или что), но вы, конечно же, можете вести с ними один и тот же разговор.