Как мне управлять бинарными зависимостями для моих драгоценных камней в производстве? - PullRequest
12 голосов
/ 27 мая 2011

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

Однако некоторые драгоценные камни зависят от двоичных файлов (например, Paperclip зависит от ImageMagick, PDFKit зависит от wkhtmltopdf), которые могут устанавливаться или не устанавливаться в развертываемой системе.

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

Есть ли хороший способ обеспечить установку этих внешних двоичных файлов и библиотек? Есть ли у него поддержка? Должен ли я просто изменить свой сценарий развертывания capistrano? Должен ли я включить двоичные файлы в свой репозиторий и убедиться, что гемы ищут их в нужном месте?

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

Ответы [ 3 ]

12 голосов
/ 27 мая 2011

Из моего опыта та же проблема с вами, где мои серверы являются разностными платформами (OpenSuSe, CentOS и OSX).

Я помещаю скрипт для установки бинарного файла (yum, zypper, apt-get и т. Д.) На capistranoскрипт, используйте метод ruby ​​system () для проверки работы команды.в вашем примере ImageMagick.Это как то так

  desc "ImageMagick from source"
  task :ImageMagick => :prepare do
    d_url = "ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz"
    file = "ImageMagick.tar.gz"
    sh("#{os_installer} install -y ghostscript-devel ghostscript-library libpng-devel libjpg-devel")
    Dir.chdir('downloads') do
      sh("wget -O #{file} #{d_url}")

      raise "ERROR: Unable to download ImageMagick" unless File.exist?(file)

      sh("tar -xzvf #{file}")
      unzip_dir = Dir.glob("ImageMagick-*").first

      Dir.chdir(unzip_dir) do
        sh("./configure --prefix=/usr --with-x=no --disable-static --with-modules --without-perl --without-magick-plus-plus --with-quantum-depth=8")
        sh("make")
        sh("make install")
        sh("ldconfig")
      end 

      raise "Unable to find ImageMagick" unless system("convert --version")
    end 
  end 
6 голосов
/ 30 мая 2011

Не уверен, применимо ли это к вам, но мы используем puppet для этой цели.Другая (похожая) альтернатива - chef .

Так что мы делаем «сценарий» настройки наших машин, но независимо от наших рецептов капистрано.Это не совсем идеальный вариант, но он также обеспечивает более чистое разделение: наши парни / разработчики систем используют марионетку, а разработчики рельсов используют capistrano.

2 голосов
/ 05 июня 2011

С Puppet вы можете сказать что-то подобное в своем манифесте:

...