使用第三方宝石的综合厨师

时间:2015-09-11 10:58:25

标签: ruby rubygems chef gitlab-omnibus

有人可以帮助解决有关使用运行厨师食谱的综合安装使用第三方宝石的问题吗? 我想使用' 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

然而,这总是试图编译gem,这会导致我们的目标安装环境出错,因为我们不能指望使用诸如 make g ++ 之类的开发工具,我们不想强行安装它们。

我怎样才能让厨师看到'这个宝石还是指定第三方宝石没有编译运行?这可能吗?

如果我在具有 make g ++ 的机器上使用 gem_package 的更多信息,我最终会在安装中使用以下内容目录(看起来与以前略有不同)。这是路径问题吗?我已经搜遍了所有但无法找到解决方案

./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

非常感谢您的帮助

2 个答案:

答案 0 :(得分:0)

  

我怎样才能让厨师“看到”这个宝石或指定第三方宝石   没有编译运行?这可能吗?

不,如果一个gem有一些C扩展名,那么它必须被编译并需要构建工具,这就是为什么有build-essential食谱。

chef_gemgem_package之间的区别是:

  • gem_package将安装到系统ruby(或默认为chef embedded ruby​​不存在),其中chef_gem将始终安装在chef embedded ruby​​中。
  • gem_package在汇总阶段运行,其中chef_gem在编译时运行

主要原因是chef_gem旨在安装用于配方的宝石,其中gem_package旨在管理系统宝石供厨师使用。

答案 1 :(得分:0)

想想我找到了这样做的方法......

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

我可以

require 'P4'

在我的食谱中