рельсы пучок чистые

88

После обновления пакета у вас будут некоторые драгоценные камни, которые могут быть устаревшими, поскольку была установлена ​​более новая версия этого драгоценного камня. Под bundleисполняемым файлом такой команды нет bundle clean. Как избавиться от этих устаревших драгоценных камней?

Это попытка уменьшить размер пули в моем приложении rails.

iGbanam
источник

Ответы:

132

Если вы используете Bundler 1.1 или более позднюю версию, вы можете использовать bundle clean, как вы могли себе представить. Это избыточно, если вы используете bundle install --path(Bundler управляет местоположением, указанным с помощью --path, поэтому берет на себя ответственность за удаление устаревших драгоценных камней), но если вы использовали Bundler для установки драгоценных камней в качестве системных драгоценных камней, тогда bundle clean --forceбудут удалены любые системные драгоценные камни, которые не требуется для вашего Gemfile. Совершенно очевидное предостережение: не делайте этого, если у вас есть другие приложения, которые полагаются на системные драгоценные камни, которых нет в вашем Gemfile!

Пэт Шонесси (Pat Shaughnessy) дал хорошее описание bundle cleanи других нововведений в сборщике 1.1 .

Дэвид Уоллер
источник
30
Для тех, кто использует rvm, обратите внимание, что bundle clean --forceэто не касается ваших глобальных драгоценных камней, а только тех, которые находятся в вашем текущем наборе. Так bundle clean --forceдает тот же результат, что и и быстрее, чем rvm gemset emptyследует bundle install.
Гейб Копли
19
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: «Bundle clean --force» может сдуть большое количество драгоценных камней, если вы не будете осторожны. Это должна быть первая строка этого ответа ... тем более, что у него так много голосов. БЫТЬ ОСТОРОЖЕН!
jerrylroberts 09
36

Если вы используете RVM, вы можете использовать его rvm gemset emptyдля текущего набора гемов - эта команда удалит все драгоценные камни, установленные в текущий набор гемов (сам набор гемов останется на месте). Затем запустите bundle install, чтобы установить актуальные версии гемов. Также убедитесь, что вы не удалили такие общие драгоценные камни, как rake, bundler и т. Д. Во время rvm gemset empty(если это так, установите их вручную с помощью gem installдо bundle install).

Трушкевич
источник
22

Если вы используете RVM, вы можете устанавливать свои драгоценные камни в наборы . Таким образом, когда вы хотите выполнить полную очистку, вы можете просто удалить гемсет, который, в свою очередь, удалит все установленные в нем драгоценные камни. Другой вариант - просто удалить неиспользуемые драгоценные камни и повторно запустить bundle installкоманду.

Поскольку сборщик предназначен для управления версиями гемов для каждого проекта, он не предоставляет bundle cleanкоманду. Это будет означать возможность удаления драгоценных камней, связанных с другими проектами, что нежелательно. Это означает, что сборщик, вероятно, не тот инструмент для управления каталогом гемов. Моя личная рекомендация - использовать гемсеты RVM для изолирования ваших драгоценных камней в определенных проектах или рубиновых версиях.

Пан Томакос
источник
41
Не нужно удалять гемсет, вы можете просто набрать «rvm gemset empty gemset_name», а затем снова запустить «bundle install».
JAG
Отличное объяснение. Знание этого о сборщике помогает. Спасибо.
Volte
9
bundle clean --force сделает свою работу
моряк
с помощью rvm протрите папку .rvm / gems / ruby-xxxxxx / spec, если "bundle install" отказывается повторно загружать драгоценные камни.
barbacan
@JAG Я бы добавил, что вам нужно 'gem install bundler' после очистки gemset, чтобы иметь возможность вызывать установку пакета
maleta
13

Честно говоря, у меня были проблемы с циклическими зависимостями сборщика, и лучший способ - это сделать rm -rf .bundle. Избавьтесь от головной боли и просто воспользуйтесь молотком.

Тайлер Брок
источник
1
Мне пришлось сделать это, чтобы он перестал беспокоить меня по поводу «вы должны вызывать установку пакета с --no-deployment». Спасибо
Кевин
2
Спасибо за идею. Хотя мне помогло использование молотка побольше. rvm implode --forceа затем переустановите rvm
Райан
1

Я полагаю, вы устанавливаете драгоценные камни в vendor/bundle? Если да, то почему бы просто не удалить все драгоценные камни и не провести чистку bundle install?

Леонид Шевцов
источник
мой каталог поставщика отслеживает только активы и установленные плагины. Я на Rails 3.1
iGbanam
Тогда в чем причина удалять неиспользуемые драгоценные камни, если они не копируются при развертывании? Они не занимают так много места.
Леонид Шевцов
я развертываю это приложение rails в интрасети; Это означает, что я обрабатываю файлы и среду локально. если вы знаете какие-либо решения, которые я могу использовать для этого, поделитесь, пожалуйста.
iGbanam
0

Просто удалите устаревшие драгоценные камни из своего Gemfile. Если вы говорите о Heroku (вы не упомянули об этом), то слаг компилируется для каждой новой версии, просто используя текущее содержимое этого файла.

Гарет
источник
это не обязательно для героку. Я хочу уменьшить размер самого приложения rails.
iGbanam
0

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

bundle clean --force

codevb
источник