Ruby returns 尝试在厨师食谱中包含模块时出现未初始化常量错误

Ruby returns uninitialized constant error when trying to include a module within a chef recipe

我有一个 java/recipes/windows 配方,它使用一种名为 win_friendly_path 的方法,但它不起作用,因为 win_friendly_path 尚未定义。

win_friendly_path 然而在 ../windows/libraries/windows_helper.rb 中定义如下:

module Windows
  module Helper
def win_friendly_path(path)
      path.gsub(::File::SEPARATOR, ::File::ALT_SEPARATOR || '\') if path
    end

我已经根据 windows 食谱在 java (./) 食谱中设置了 berksfilemetadata.rb

我不确定如何包含这个模块,所以现在我试图在 java/cookbook/windows 配方中使用 include WindowsHelper 并收到此错误:

uninitialized constant #<Class:#<Chef::Recipe:0x00000000029a2188>>::WindowsHelper

我已经尝试了几种变体,现在感觉我已经花了太多时间来解决这个问题,所以非常感谢您的帮助。

更新:将这一行 ::Chef::Resource.send(:include, Windows::Helper) 插入到我的 java/recipes/windows 食谱中会出现以下错误:

Chef::Exceptions::ValidationFailed
       ----------------------------------
       value is a required property

试试这个

include Windows::Helper

插入以下行为我解决了这个问题:

::Chef::Recipe.send(:include, Windows::Helper)

这让我可以使用 windows 食谱中的以下模块的变量:

module Windows
  module Helper
...
{Variable}
  {Other_variable}
...