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

Какова цель поставщика/пакета? Хероку говорит мне удалить его

При нажатии некоторых изменений на Heroku я заметил предупреждение о vendor/bundle (см. ПРЕДУПРЕЖДЕНИЕ).

Какова цель этого каталога, если в соответствии с предупреждением он должен быть удален из Git отслеживания?

Почему нет vendor/bundle автоматически .gitignore 'd по умолчанию Rails?

Должен ли я запускать bundle pack? (На самом деле это bundle package??)

Каковы плюсы и минусы вокруг bundle pack (относительно как development и production)?

Чтобы сделать это еще более запутанным, существует популярное сообщение в блоге Райана МакГири под названием "Всеобщее приложение Vendor Everything" , которое решительно выступает за запуск bundle install --path vendor и echo 'vendor/ruby' >> .gitignore и упаковать драгоценные камни в vendor/cache, запустив bundle package. Любой свет, пролитый на это относительно моих других проблем, будет с благодарностью.

Спасибо.

-bash> git push production master
...

-----> Heroku receiving push
-----> Ruby/Rails app detected
-----> WARNING:  Removing `vendor/bundle`.
       Checking in `vendor/bundle` is not supported. Please remove this directory
       and add it to your .gitignore. To vendor your gems with Bundler, use
       `bundle pack` instead.
-----> Installing dependencies using Bundler version 1.2.1
       Running: bundle install --without development:test --path vendor/bundle --binstubs bin/ --deployment
       Using rake (0.9.2.2)
       Using i18n (0.6.0)
       ...
4b9b3361

Ответ 1

Если у вас есть каталог vendor/bundle в вашем проекте, а затем в какой-то момент , вы должны запустить команду bundle с аргументом --path vendor/bundle. Это приведет к загрузке файлов для всех ваших проектов (перечисленных в Gemfile) в каталог vendor/bundle в локальном проекте, а не в место расположения системных жемчужин. Вы сделаете это, чтобы полностью изолировать жемчужины проекта от любого другого проекта.

Бундлер хорош в разрешении всех зависимостей, поэтому нет необходимости использовать --path, но некоторые люди предпочитают делать это, так как хотят сохранить свои драгоценные камни отдельно и организованными с помощью своего проекта. Это также означает, что связка на вашей локальной машине настроена так же, как Heroku использует bundler.

С помощью этой опции вы все равно загружаете все драгоценные камни с серверов rubygems каждый раз, когда вы запускаете команду bundle.

bundle package делает еще один шаг и фактически загружает исходные файлы gem из rubygems и кэширует их в каталог vendor/cache. Это означает, что вам больше не нужно подключение к rubygems для запуска команды bundle, поскольку она будет использовать упакованные файлы в качестве источника. Если вам нужно обновить версию gem, тогда вам нужно будет подключиться к rubygems, чтобы собрать новую версию при первом запросе. Использование bundle package, конечно, потребует дополнительного дискового пространства, которое может или не может быть проблемой в зависимости от ситуации. Это также увеличило бы требования времени на развертывание и пропускную способность каждый раз, когда вы нажимаете на Heroku.

Heroku запускает команду bundle каждый раз, когда вы git push, читаете ваш Gemfile.lock и устанавливаете драгоценные камни, необходимые для работы приложения. По умолчанию используется опция --path vendor/bundle. Это значит, что каждое приложение имеет набор gem файлов отдельно от всех других приложений на Heroku. Если у вас есть каталог vendor/bundle в вашем исходном элементе управления, и вы нажимаете его на Heroku, тогда вы можете видеть, что существует потенциальная вероятность значительного конфликта, поскольку он затем пытается загрузить драгоценные камни в каталог vendor/bundle, который уже существует. Если он нажат, Heroku удаляет каталог vendor/bundle, прежде чем он запустит bundle install, чтобы удалить эти потенциальные конфликты. Если это так, вы будете тратить время развертывания и пропускную способность, оставив vendor/bundle под управлением версии, лучше добавить его в свой .gitignore.

Если вы хотите полностью контролировать свои драгоценные камни на Heroku, используйте команду bundle package и убедитесь, что каталог vendor/cache находится под контролем источника. Когда Heroku запускает bundle install, он будет использовать содержимое vendor/cache как источник драгоценных камней, а не использовать rubygems. Будет ли это полезно или нет, это будет вопрос личных предпочтений, тип приложения, которое вы строите, и как часто вы обновляете свои драгоценные камни. Сообщение Райана МакГери предполагает, что использование bundle package полезно в случае, если старый камень станет недоступным в какой-то момент в будущем. Это, по-видимому, большая проблема для проектов/приложений, которые не регулярно обновляются.

С моей точки зрения, я обычно использую --path vendor/bundle, чтобы моя локальная настройка была как можно ближе к Heroku's. Я помещал vendor/bundle в файл проекта .gitignore, и я не собираю камни, так как мои проекты обновляются относительно регулярно.

Rails имеет очень ограниченный файл .gitignore. Ожидается, что вы создадите то, что вам нужно, поэтому vendor/bundle по умолчанию не включен.

Я предполагаю, что Heroku означает bundle package, когда говорят bundle pack.