【问题标题】:Can't use helper method in Chef无法在 Chef 中使用辅助方法
【发布时间】:2014-12-24 10:05:17
【问题描述】:

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

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

我做错了什么?

【问题讨论】:

    标签: ruby chef-infra


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-12-25
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多