gpt4 book ai didi

ruby - 不能在 Chef 中使用辅助方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:35:53 28 4
gpt4 key购买 nike

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

my_cookbook/libraries/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/recipes/default.rb

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

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

当我应用配方时,我得到了这样的undefined method错误:

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

我做错了什么?

最佳答案

具体错误是您将函数修补到用户资源而不是执行。但更好的方法是将其混合到当前配方中。只需将 extend Foo::Helper 添加到配方的顶部。您也可以将其作为模块方法并直接调用为 Foo::Helper.foo_daemon_command。一般来说,在进行全局 DSL 更改时应该非常小心,并且永远不要从配方代码中进行更改。

关于ruby - 不能在 Chef 中使用辅助方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27586838/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com