当前位置: 首页 > 知识库问答 >
问题:

厨师库助手方法未定义

钱运浩
2023-03-14

我正在尝试编写一个LWRP,其中基于条件它将从助手库调用方法。我在让提供者读取外部方法时遇到语法问题。

供应商很直接

# providers/provider.rb
require_relative '../libraries/acx_shared'
include Acx

action :create  do
  Chef::Log.debug('{jefflibrary->lwrp->user} - start')

if @new_resource.shared == true
  Acx::User::Shared.true_shared()
else
  Acx::User::Shared.false_shared()
end

if @new_resource.sudo == true
  Chef::Log.error('I HAVE THE POWER')
else
  Chef::Log.error('my power is weak and feeble')
end
if @new_resource.password == true
  Chef::Log.error('the secret password is 12345')
else
  Chef::Log.error('I will never tell you the secret to the airlock')
end

  Chef::Log.debug('{jefflibrary->lwrp->user} - end')
end

以及helper库

#libraries/acx_shared.rb
module Acx
  module User
    module Shared
    def true_shared
      #puts blah
      Chef::Log.error('I am pulling this from a library reference')
    end
    def false_shared
      Chef::Log.error('I am not very good at sharing')
    end
  end
end
end

但每当我尝试运行它时,不管设置了什么资源属性,我都会得到

NoMethodError
           -------------
           undefined method `false_shared' for Acx::User::Shared:Module

我显然在写助手库的留档中遗漏了一些东西,但我不确定是什么。试着移动一些东西,但开始没有想法。

共有1个答案

潘修为
2023-03-14

尝试删除include Acx

可能发生的情况是,因为您正在这样做,它实际上在Acx内部寻找另一个模块名Acx。因此,从对*共享方法的调用中删除include或Acx::。您也不能在尝试时直接从模块中调用实例变量。您需要有一个包含模块的类,然后在该类的对象上调用该方法<或者,您可以将这些方法升级为类方法(self)你可以直接给他们打电话。

类似于:

# providers/provider.rb
require_relative '../libraries/acx_shared'

action :create  do
  Chef::Log.debug('{jefflibrary->lwrp->user} - start')

acx = Class.new.exted(Acx::User::Shared)
if @new_resource.shared == true
  acx.true_shared()
else
  acx.false_shared()
end

if @new_resource.sudo == true
  Chef::Log.error('I HAVE THE POWER')
else
  Chef::Log.error('my power is weak and feeble')
end
if @new_resource.password == true
  Chef::Log.error('the secret password is 12345')
else
  Chef::Log.error('I will never tell you the secret to the airlock')
end

  Chef::Log.debug('{jefflibrary->lwrp->user} - end')
end

#libraries/acx_shared.rb
module Acx
  module User
    module Shared
    def self.true_shared
      #puts blah
      Chef::Log.error('I am pulling this from a library reference')
    end
    def self.false_shared
      Chef::Log.error('I am not very good at sharing')
    end
  end
end
end
 类似资料:
  • 我的食谱没有编译,抛出了错误uninitialized constant Chef::Recipe::AWS。chef\u gem aws sdk安装良好,但在aws运行时仍无法编译。调用config(access\u key\u id:“key”,secret\u access\u key:“pass”)。

  • 问题内容: 我有以前具有大量方法的类,因此我将此方法的工作细分为“辅助”方法。 这些辅助方法声明为强制执行封装- 但是我想对大型公共方法进行单元测试。是否也可以对辅助方法进行单元测试,好象其中的一个失败,而调用它的公共方法也会失败,这样我们就可以确定为什么失败了? 另外,为了使用模拟对象测试这些对象,我需要将其可见性从私有更改为受保护,这是否可取? 问题答案: 一种方法是省略测试并将其放在同一程序

  • 英文原文: http://emberjs.com/guides/templates/writing-helpers/ 有时,你想在程序里多次使用同一段 HTML 代码。这种情况下,你就可以自定义一个任何 Handlebars 模板都能调用的助手方法。 比如,你频繁地用一个拥有 class(译注:这个class为css中的class,非JavaScript中的类) 的 <span>来包裹特定的值。你

  • 问题内容: 我遇到一个问题,即我创建的ASP.NET MVC html帮助器方法在每次调用时都不会“重新生成”。 helper方法的目的是创建要在angularjs框架中使用的Javascript对象。例如,这是一个使用helper方法的代码片段(从html页面的script标签内调用): Model是具有各种属性的类的实例,但我只希望将FirstName,LastName,ID和Role序列化为

  • 本文向大家介绍易语言API助手使用方法,包括了易语言API助手使用方法的使用技巧和注意事项,需要的朋友参考一下 易语言API助手它的唯一功能就是方便查询API函数命令,能够自动在程序中加入指定dll命令声明的向导程序。 1、先了解一下API,Application Programming Interface,应用程序编程接口,编程人员通过这个接口,可以调用系统某些软件或者硬件的功能! 2、易语言的

  • 我已经遵循了在PHP Laravel 5中创建自定义助手函数的最佳实践是什么? 这个问题的两个答案帮助我在laravel 5.1中创建自定义静态类。因为它是一个静态类。提前谢谢你。