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

Как вы прекомпилируете собственные расширения для рубинового жемчужина для Linux?

У нас есть рубиновое приложение, которое зависит от драгоценного камня с родными расширениями (в данном конкретном случае Nokogiri). Однако по разным причинам мы не можем установить предварительные условия сборки (такие как build-essential, libxslt-dev, ruby-dev и т.д.) Для этого драгоценного камня на наш производственный хост.

Есть ли (стандартный?) способ переупаковки драгоценного камня с встроенными расширениями, предварительно построенными?

Это должно быть возможно (для Windows это довольно стандартно), но я не могу найти документацию по этому вопросу.

Обратите внимание, что нам нужно поддерживать только одну платформу с известными версиями всех системных библиотек (Ubuntu 9.04 Server 64 bit, Ruby 1.8.7).

UPDATE: Мы используем Bundler, поэтому мы хотим по-прежнему иметь gem для установки в конце дня, не пакет debian.

4b9b3361

Ответ 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