Шеф-повар с омнибусом, использующий сторонние драгоценные камни

Может ли кто-нибудь помочь с вопросом об использовании стороннего драгоценного камня с комплексной установкой, на которой запущены рецепты Chef? Я хотел бы использовать гем «p4ruby», который был упакован с омнибусом и должен быть доступен для использования в рецепте с использованием

require 'P4'

я получаю ошибку

cannot load such file -- P4

В каталоге установки я вижу

./embedded/service/gem/ruby/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubyconf.h
./embedded/service/gem/ruby/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubydebug.h
./embedded/service/gem/ruby/2.1.0/cache/p4ruby-2015.1.0.gem
./embedded/service/gem/ruby/2.1.0/specifications/p4ruby-2015.1.0.gemspec
./embedded/service/gem/ruby/2.1.0/build_info/p4ruby-2015.1.0.info
./embedded/lib/ruby/gems/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubyconf.h
./embedded/lib/ruby/gems/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubydebug.h
./embedded/lib/ruby/gems/2.1.0/cache/p4ruby-2015.1.0.gem

Я прочитал документацию Chef и понял, что могу использовать, например, chef_gem или gem_package.

gem_package 'p4ruby' do
end

Однако это всегда пытается скомпилировать гем, и это приводит к ошибкам в нашей целевой среде установки, поскольку мы не можем ожидать, что инструменты разработки, такие как make и g++, будут доступны, и мы не хотите принудительно установить их.

Как я могу заставить Chef «увидеть» этот гем или указать сторонний гем без запуска компиляции? Это возможно?

Для получения дополнительной информации, если я использую gem_package на машине с make и g++, я получаю следующее в каталоге установки (который выглядит немного иначе, чем раньше). Это проблема пути?? все облазил но решения не нашел

./embedded/service/gem/ruby/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubyconf.h
./embedded/service/gem/ruby/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubydebug.h
./embedded/service/gem/ruby/2.1.0/cache/p4ruby-2015.1.0.gem
./embedded/service/gem/ruby/2.1.0/specifications/p4ruby-2015.1.0.gemspec
./embedded/service/gem/ruby/2.1.0/build_info/p4ruby-2015.1.0.info
./embedded/lib/ruby/gems/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubyconf.h
./embedded/lib/ruby/gems/2.1.0/gems/p4ruby-2015.1.0/ext/P4/p4rubydebug.h
./embedded/lib/ruby/gems/2.1.0/cache/p4ruby-2015.1.0.gem
./embedded/lib/ruby/gems/2.1.0/specifications/p4ruby-2015.1.0.gemspec

Большое спасибо за любую помощь


person ScottW    schedule 11.09.2015    source источник


Ответы (2)


Как я могу заставить Chef «увидеть» этот гем или указать сторонний гем без запуска компиляции? Это возможно?

Нет, если гем имеет некоторое расширение C, он должен быть скомпилирован и ему потребуются инструменты сборки, поэтому существует построение-необходимо поваренная книга.

Различия между chef_gem и gem_package заключаются в следующем:

  • gem_package будет устанавливаться в системный рубин (или по умолчанию встроенный рубин шеф-повара отсутствует), где chef_gem всегда будет устанавливаться в встроенный рубин шеф-повара.
  • gem_package выполняется на этапе конвергенции, где chef_gem выполняется во время компиляции

Основная причина в том, что chef_gem предназначен для установки драгоценных камней для использования в рецептах, тогда как gem_package предназначен для управления системными драгоценными камнями для использования вне шеф-повара.

person Tensibai    schedule 11.09.2015

Думаю, я нашел способ сделать это...

$:.unshift *Dir[File.path('<my_path_to_gems>/**/lib')]

тогда я могу

require 'P4'

в моих рецептах

person ScottW    schedule 11.09.2015