ruby – 不能在Chef中使用helper方法

我想在配方中使用一个方法,所以我为它创建了一个辅助方法.

my_cookbook /库/ foo_helper.rb

module Foo
  module Helper
    def foo_daemon_command(action)
      %Q{bash -c "export PATH='/usr/local/bin:/opt/rbenv/bin:$PATH'; eval '$(rbenv init -)'; cd /opt/foo; /opt/rbenv/shims/ruby foo_daemon.rb #{action} >>/var/log/foo/cron_#{action}.log 2>>/var/log/foo/cron_#{action}.log" }
    end
  end
end

并从配方中加载方法.

my_cookbook /食谱/ default.rb

Chef::Resource::User.send(:include, Foo::Helper)

execute "foo daemon restart" do
  command foo_daemon_command("restart")
end

当我应用配方时,我得到未定义的方法错误,如下所示:

NoMethodError
-------------
undefined method `foo_daemon_command' for Chef::Resource::Execute

我究竟做错了什么?

最佳答案 特定错误是您正在将函数修补到User资源而不是Execute.但更好的方法是将其混合到当前配方中.只需将extend Foo :: Helper添加到配方的顶部即可.您还可以将其设置为模块方法,并将其直接调用为Foo :: Helper.foo_daemon_command.一般来说,全球DSL变更应该非常小心,而不是从食谱代码.

点赞