【问题标题】:Chef with omnibus using 3rd party gems使用 3rd 方宝石的综合厨师
【发布时间】:2015-09-11 10:58:24
【问题描述】:

有人可以帮助解决有关在运行 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 或指定第 3 方 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

非常感谢您的帮助

【问题讨论】:

    标签: ruby rubygems chef-infra gitlab-omnibus


    【解决方案1】:

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

    不,如果 gem 有一些 C 扩展名,则必须对其进行编译并且需要构建工具,这就是 build-essential 食谱的原因。

    chef_gemgem_package 的区别是这样的:

    • gem_package 将安装到系统 ruby​​(或默认为没有嵌入的 chef ruby​​),其中 chef_gem 将始终安装在 chef embedded ruby​​ 中。
    • gem_package 在收敛阶段运行,chef_gem 在编译时运行

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

    【讨论】:

      【解决方案2】:

      我想我找到了一种方法……

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

      我可以

      require 'P4'
      

      在我的食谱中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多