Я хочу упаковать программу Ruby, полученную от git, в пакет RPM. У меня есть сервер сборки и производственный сервер (Same OS / Same Arch).
Как и в большинстве других проектов Ruby, у моего есть зависимости от драгоценных камней.
Я нашел два способа делать то, что хочу, и хотел бы знать, какой из них лучший - самая философия unix / linux - с точки зрения операций
Первый (который мне кажется лучше) - это сделать bundle install --standalone --deployment --path %{buildroot}/usr/lib/rubygems/1.8/gems/ --binstubs %{buildroot}/usr/lib/rubygems/1.8.bin
. При этом гем будет установлен в системный путь гем на сервере, на котором будет развернут .rpm, без необходимости устанавливать пакет. Я не уверен, что произойдет, когда я установлю другие rpm с такими же драгоценными камнями? Что произошло, когда я удалил пакет с гемом, который был общим для двух пакетов?
В bundle install --deployment
команда будет размещаться непосредственно в самом проекте. Таким образом, все можно найти на vendor/
каталог. В Интернете я мог видеть некоторые сообщения о политике поставщика всего, это просто не кажется правильным с точки зрения операций, поскольку многие драгоценные камни будут дублироваться. Поскольку у меня нет рубинового фона, я не знаю точных плюсов / минусов, которые у него могут быть
Если кто-то уже сделал нечто подобное, каким путем вы пошли? Что - с операционной точки зрения - лучше всего подходит для этого?
Не развертывайте гем с RPM, если не развернете все его зависимые драгоценности с RPM. Увидеть Рекомендации Fedora по упаковке для Ruby для получения информации о правильном способе создания RPM и образца файла спецификации для сборки гемов, а также о том, как создать RPM для вашего веб-приложения Rails.
Если вам нужно сделать что-то, что нарушает лучшие практики RPM, тогда вам лучше не использовать RPM для развертывания. Вместо этого используйте инструменты, ориентированные на развертывание, такие как capistrano; он может автоматически проверить ваше приложение из git и правильно его развернуть (после настройки).