1

编辑:rubygems 2.4.4 中的错误。(在 2.4.5 中修复)

我在使用 chef_gem 资源安装带有 Chef Client v12.2.1 的嵌入式 ruby​​ 时遇到问题:

  Mixlib::ShellOut::ShellCommandFailed
  ------------------------------------
  chef_gem[zabbixapi] (generic_server_win::libzabbix-deps line 6) had an error: Mixlib::ShellOut::ShellCommand Failed: Expected process to exit with [0], but received '1'
  ---- Begin output of C:/opscode/chef/embedded/bin/gem install c:/chef/cache/zabbixapi-2.2.2.gem -q --no-rdoc --no-ri -v "2.2.2" ----
  STDOUT:
  STDERR: ERROR:  While executing gem ... (Errno::EADDRNOTAVAIL)
      The requested address is not valid in its context. - connect(2)
  ---- End output of C:/opscode/chef/embedded/bin/gem install c:/chef/cache/zabbixapi-2.2.2.gem -q --no-rdoc --no-ri -v "2.2.2" ----
  Ran C:/opscode/chef/embedded/bin/gem install c:/chef/cache/zabbixapi-2.2.2.gem -q --no-rdoc --no-ri -v "2.2.2" returned 1

还:

  • 使用 --local 选项以管理员身份在命令行上手动运行命令时的结果相同
  • 其他宝石也会出现同样的错误。
  • 我试图在其上运行它的服务器无法访问互联网
  • 我无法在新安装的测试机器上重现问题(可以访问互联网)
  • 使用的 ruby​​ 版本是 2.0.0:ruby 2.0.0p451 (2014-02-24) [i386-mingw32]

这是我的厨师食谱:

cookbook_file "#{Chef::Config[:file_cache_path]}/zabbixapi-2.2.2.gem" do
  source 'zabbixapi-2.2.2.gem'
end

chef_gem "zabbixapi" do
  source "#{Chef::Config[:file_cache_path]}/zabbixapi-2.2.2.gem"
end
4

1 回答 1

0

您的问题是该chef_gem资源在强制在厨师安装中使用嵌入式红宝石的方式上是特殊的,并且它在收敛之前运行以允许在食谱中需要宝石。关于它的文档here

要使用与 chef 一起部署的本地源,您必须确保该文件之前存在,如果不存在,gem 命令将尝试下载它(并且由于无法访问互联网而失败)。

为了确保您的本地文件在chef_gem调用之前存在,您必须确保在编译时使用此技巧调用 cookbook_file 资源

在您的具体情况下,这应该这样做:

cookbook_file "#{Chef::Config[:file_cache_path]}/zabbixapi-2.2.2.gem" do
  action :nothing
  source 'zabbixapi-2.2.2.gem'
end.run_action(:create)

chef_gem "zabbixapi" do
  source "#{Chef::Config[:file_cache_path]}/zabbixapi-2.2.2.gem"
end

资源中的操作无是为了避免将其调用两次(一次在编译阶段,一次在收敛阶段,即使后者不会产生任何影响,最好节省时间,不要对其进行两次评估)然后调用该:create操作定义的结尾将触发编译阶段的操作,并且文件将在chef_gem稍后的调用中出现。

于 2015-05-26T11:59:16.847 回答