Подтвердить что ты не робот

Bundler при попытке обновить или установить будет вечно вешать

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

Например:

bundle update

Будет вечно вешать, если я не буду использовать его так:

bundle update activerecord

Затем он будет завершен как обычно.

Любая помощь будет оценена.

4b9b3361

Ответ 1

Эта проблема связана с отсутствующей зависимостью или худшей зависимостью от зависимостей. Это распространено, когда вы не используете rubygems.org в качестве своего gemserver (корпоративной среды).

Общие шаблоны:

  • У вас нет установленного gem
  • У вас нет зависимостей установленного gem
  • У вас нет этого драгоценного камня, установленного без его зависимостей.

Самый простой метод

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

Если вы не можете сделать это по причинам производства, и у вас нет истории приложений, с которой можно было бы подумать, когда был добавлен жемчужина проблемы, тогда:


Более простая техника

Узнав немного с момента написания ответа, я подумал, что передаю эту отличную статью о том, как запускать пакет с исчерпывающим отладочным результатом

export DEBUG_RESOLVER=1
bundle  2> debug_output.txt 1> stdio.txt &

Это приведет к выгрузке всего отладочного (ошибочного) вывода на debug_output.txt и обычного материала экрана до stdio.txt.

Вы также захотите сбросить 1>, потому что каждый раз, когда сборщик выгружает строку в 2 (stderr), он помещает crlf в 1. Поэтому либо сбрасывайте 1, либо выполняйте задание. Я делаю оба, чтобы работать в одном терминале.

Я обычно следую за ним:

tail stdio.txt 

чтобы убедиться, что все началось, затем:

tail -n 10000 -f debug_output.txt 

Чтобы выполнить поиск с помощью /FAIL] через файл для неудачных попыток установить зависимость. Найдите пару из них, которые одинаковы, и вы, как правило, находите своего преступника. stderr работает для bundle install или bundle update.


Отладка вашей частной технологии Gemserver

Мне нужно было использовать этот метод устранения исключений, чтобы определить, что мой (корпоративный) индекс gemserver стал поврежденным

  • комментарий всех драгоценных камней
  • запустите bundle update, чтобы подтвердить работу с пустым набором.
  • un-comment один камень и bundle update
  • GOTO 3, пока вы не столкнетесь с проблемой.
  • исследование его зависимостей

Когда вы закончите

Сбросьте ENV var с помощью

unset DEBUG_RESOLVER

Ответ 2

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

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

Для меня после запуска:

sudo bundle update --verbose

он постоянно висел здесь:

Query Gemcutter Dependency Endpoint API: tenderlove-frex
Fetching from: http://rubygems.org/api/v1/dependencies?gems=tenderlove-frex
HTTP Success
Query List: []

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

source 'http://rubygems.org'
gem 'rails', '~> 3'
gem 'airbrake'

Я удалил версию рельсов:

source 'http://rubygems.org'
gem 'rails'
gem 'airbrake'

Тогда это сработало, но я заметил в своем Gemfile.lock, что он использовал Rails 2.3.X. Таким образом, воздушный тормоз, казалось, зависел от Rails 2, но я хотел 3. Я не мог найти нигде, что воздушный тормоз имел эту зависимость Rails 2.x, поэтому не уверен, почему так закончилось. Почему bundler не может выводить что-то более значимое, вне меня.

Это сработало:

source 'http://rubygems.org'
gem 'rails', '~> 3'
gem 'airbrake', '~> 3'

Я действительно думаю, что с Бандлером что-то не так, но не уверен.

Ответ 3

Бундлер, возможно, не висит. Я просто испытал 7-минутное время, чтобы связать относительно небольшой Gemfile, и это на самом быстром SSD Macbook Pro с подключением к загрузке 50 ГБ.

Ответ 4

При развертывании на экземплярах AWS убедитесь, что ваша группа безопасности разрешает исходящие HTTP и/или HTTPS-соединения - я столкнулся с этой проблемой, потому что я слишком сильно ограничил группу безопасности.

Ответ 5

попробуйте это:

Я столкнулся с аналогичной проблемой, она была решена странно, переключившись с Wifi на LAN, чтобы подключиться к Интернету.

надеюсь, что это поможет кому-то.