我正在编写Chef cookbook来部署和应用并创建用户。它没有API,并使用奇怪的散列方法,因此我为它编写了一个简短的库模块。为简洁起见,我仅在下面列出makeSalt()
方法。
module Foo_packagist
module Password
def makeSalt(len=31)
require 'securerandom'
return Digest.hexencode(SecureRandom.random_bytes((len*6/8.0).ceil)).to_i(16).to_s(36)[0..len-1]
end
end
end
麻烦的是,在每次厨师运行中,我得到:
NoMethodError
-------------
undefined method `makeSalt' for Foo_packagist::Password:Module
并在chef-shell
调试我得到:
chef (12.4.0)> puts ::Foo_packagist::Password.instance_methods()
makeSalt
encodePassword
chef (12.4.0)> puts ::Foo_packagist::Password.makeSalt()
NoMethodError: undefined method `makeSalt' for Foo_packagist::Password:Module
chef (12.4.0)> puts ::Foo_packagist::Password::makeSalt()
NoMethodError: undefined method `makeSalt' for Foo_packagist::Password:Module
调用此方法的正确方式是什么?
答案 0 :(得分:2)
将其更改为def self.makeSalt
。这是模块级方法的Ruby语法。
答案 1 :(得分:1)
试试这个 - >
module Foo_packagist
module Password
def self.makeSalt(len=31)
require 'securerandom'
return Digest.hexencode(SecureRandom.random_bytes((len*6/8.0).ceil)).to_i(16).to_s(36)[0..len-1]
end
end
end
然后打电话给它 - >
Foo_packagist::Password.makeSalt()