Bundler при попытке обновления или установки зависнет навсегда - PullRequest
14 голосов
/ 27 февраля 2012

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

Например:

bundle update

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

bundle update activerecord

Тогда все будет завершено как обычно.

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

Ответы [ 4 ]

22 голосов
/ 31 мая 2012

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

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

  • У вас не установлен этот драгоценный камень
  • У вас не установлены зависимости этого драгоценного камня
  • Этот драгоценный камень не установлен без его зависимостей

Самая простая техника

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

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


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

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

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

Это выведет все выходные данные отладки (err) в 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

  1. закомментируйте все драгоценные камни
  2. запустить bundle update для подтверждения пустого набора работ
  3. откомментируйте один камень и bundle update
  4. GOTO 3, пока вы не столкнетесь с проблемой
  5. исследуйте его зависимости

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

Сброс ENV var с

unset DEBUG_RESOLVER

6 голосов
/ 14 ноября 2012

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

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

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

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'

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

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

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

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

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

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

2 голосов
/ 01 декабря 2014

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

1 голос
/ 07 мая 2015

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

...