无法将代码块的评估延迟到厨师食谱中的运行时

unable to delay the evaluation of code block till run time in chef recipe

我有一个厨师食谱,我想在其中包含一个 gem 文件并按如下方式使用它

gem_package "my-gem"
require '<my-gem>'
my_var = <Using methods supported by gem>

然而,这在编译过程中失败并出现错误 "cannot load such file " 有什么办法可以延迟此检查,以便在运行期间安装 gem 并可以使用。

我不想使用 ruby 块(不确定在编译期间是否会工作或失败),因为我不确定如何我使 "my_var" 变量在其他 chef-resource 的 ruby 块之外可用,或者在 ruby 块之外进行的任何条件检查期间可用。

这里有两个答案。首先是您提出的问题,您可以将代码包装在 ruby_block 资源中。这将延迟评估直到收敛阶段。

这个问题的真正答案是您应该使用 chef_gem 资源而不是 gem_package。这会自动将 gem 安装到 Chef 的 ruby 安装中,并在编译时执行以避免此问题。