有人可以帮助解决有关使用运行厨师食谱的综合安装使用第三方宝石的问题吗? 我想使用' 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
非常感谢您的帮助
答案 0 :(得分:0)
我怎样才能让厨师“看到”这个宝石或指定第三方宝石 没有编译运行?这可能吗?
不,如果一个gem有一些C
扩展名,那么它必须被编译并需要构建工具,这就是为什么有build-essential食谱。
chef_gem
和gem_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'
在我的食谱中