Как вы прекомпилируете собственные расширения для рубинового жемчужина для Linux?
У нас есть рубиновое приложение, которое зависит от драгоценного камня с родными расширениями (в данном конкретном случае Nokogiri). Однако по разным причинам мы не можем установить предварительные условия сборки (такие как build-essential, libxslt-dev, ruby-dev и т.д.) Для этого драгоценного камня на наш производственный хост.
Есть ли (стандартный?) способ переупаковки драгоценного камня с встроенными расширениями, предварительно построенными?
Это должно быть возможно (для Windows это довольно стандартно), но я не могу найти документацию по этому вопросу.
Обратите внимание, что нам нужно поддерживать только одну платформу с известными версиями всех системных библиотек (Ubuntu 9.04 Server 64 bit, Ruby 1.8.7).
UPDATE:
Мы используем Bundler, поэтому мы хотим по-прежнему иметь gem для установки в конце дня, не пакет debian.
Ответы
Ответ 1
Наконец нашел способ сделать это для драгоценных камней, которые используют rake-compiler для создания своих C-расширений (которые большинство из них).
Вам нужно сделать следующее на машине, которая идентична той, которую вы хотите развернуть, или просто не будет работать:
Установите предварительные условия сборки для построения расширений C:
# apt-get install build-essentials ruby-dev # ... etc
# gem install rake-compiler
Распакуйте драгоценный камень, который хотите перестроить:
$ gem unpack nokogiri
Создайте свой блестящий новый прекомпилированный камень:
$ rake native gem
Теперь вы можете установить собственный камень на машине без каких-либо инструментов сборки:
$ gem install pkg/nokogiri-1.4.3.1-x86-linux.gem
Successfully installed nokogiri-1.4.3.1-x86-linux
1 gem installed
Ответ 2
Сборка машины
Чтобы иметь правильную платформенную версию для всех ваших драгоценных камней, уже кэшированных,
упакуйте все драгоценные камни в vendor/cache
на идентичном компьютере:
$ bundle package --all
Придукционная машина
Установите все кешируемые кеширования, которые требуют правильного ввода
платформенная версия с использованием кеша драгоценных камней:
$ bundle install --local --deployment