Bundler при попытке обновить или установить будет вечно вешать
При попытке запуска обновления пакета или обновления пакета пакетщик будет постоянно висеть и не выполняет свою функцию. Единственный раз, когда он закончится, я укажу, что нужно обновить драгоценный камень.
Например:
bundle update
Будет вечно вешать, если я не буду использовать его так:
bundle update activerecord
Затем он будет завершен как обычно.
Любая помощь будет оценена.
Ответы
Ответ 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
, чтобы подключиться к Интернету.
надеюсь, что это поможет кому-то.