почему gem все еще устарел после обновления пакета

Я работаю над драгоценным камнем, и это на github.

Когда я включаю камень в приложение, выполните развертывание capistrano и (на сервере):

bundle outdated

Я вижу:

 * authengine (0.0.1 d8baa49 > 0.0.1 de43dfa)

который говорит мне, что доступна более поздняя фиксация. Почему обновление пакета (часть развертывания capistrano) не приводит к более поздней версии? Ограничения версии в Gemfile хост-приложения отсутствуют, и в любом случае у них одинаковый номер версии, только разные коммиты.

Даже если я запишусь на сервер и запусти

bundle update authengine

После этого получается тот же "устаревший" результат.
Что мне здесь не хватает?

Ответ 1

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

Способ проверить это - установить явное требование к версии в вашем Gemfile. Что-то вроде

gem "authengine", "> 0.0.2" #(you'll need to bump the version to make this work)
#or
gem "authengine", :ref => "d8baa49"

Затем запустите

bundle update authengine

Вы должны увидеть что-то вроде этого (это взято из моего конкретного случая):

Bundler не смог найти совместимые версии для gem "json": In Gemfile: chef (> 10.8) ruby зависит от json (<= 1.6.1,> = 1.4.4) ruby

logical-construct (>= 0) ruby depends on
  json (1.7.5)

Итак, в моем случае это проблема с явным требованием более новой версии json.

Ответ 2

Каков результат, возвращаемый при запуске bundle update authengine? Действительно ли это говорит, что он обновил драгоценный камень? Или он игнорирует драгоценный камень?

Вы можете попробовать использовать параметр --source чтобы указать Bundler на использование репозитория git. Это или ваш

bundle update authengine --source https://github.com/mustardseeddatabase/authengine.git

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

Таким образом, вы можете сделать:

gem list
gem check
gem cleanup

Или выполните полную переустановку

gem uninstall authengine
bundle install

Ответ 3

Автор, Андре Арко, заявил в 2014 году, что:

Репрезентатор Bundler определенно работает, и мы корректируем компромисс между конкретными версиями и быстро решаем на основе отзывов пользователей.

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

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