0

有人可以帮助解决有关在运行 Chef 食谱的综合安装中使用 3rd 方 gem 的问题吗?我想使用与综合包一起打包的“p4ruby”gem,应该可以在配方中使用

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_gemgem_package例如

gem_package 'p4ruby' do
end

然而,这总是试图编译 gem,这会导致我们的目标安装环境出现错误,因为我们不能期望诸如makeg++之类的开发工具可用并且我们不想强制安装它们。

我怎样才能让 Chef '看到'这个 gem 或者在没有编译运行的情况下指定一个 3rd 方 gem?这可能吗?

有关更多信息,如果我确实在具有makeg++的机器上使用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

非常感谢您的帮助

4

2 回答 2

0

我怎样才能让 Chef '看到'这个 gem 或者在没有编译运行的情况下指定一个 3rd 方 gem?这可能吗?

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

chef_gem和之间的区别gem_package是:

  • gem_package将安装到系统红宝石(或默认为厨师嵌入式红宝石不存在),其中chef_gem将始终安装在厨师嵌入式红宝石中。
  • gem_packagechef_gem在编译时运行的收敛阶段运行

主要原因是chef_gem旨在安装要在食谱中使用的 gem,该食谱gem_package旨在管理系统 gem 以供厨师使用。

于 2015-09-11T12:00:38.153 回答
0

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

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

那我可以

require 'P4'

在我的食谱中

于 2015-09-11T17:01:11.663 回答