我正在开发一个食谱来部署一个简单的 ROR 应用程序。我编写了一个 app_helper.rb 并将其放入我的食谱的库目录中,这是内容:
module AppHelper
def self.find_gem
if File.exists?("/usr/local/rvm/bin/rvm")
return `/usr/local/rvm/bin/rvm default exec which gem`.chomp
else
return "/usr/bin/gem"
end
end
end
在 recipes/default.rb 中,我将上述模块混合到 Chef::Recipe 类中
class Chef::Recipe
include AppHelper
end
如您所知,可以从配方的任何位置调用 find_gem 函数。
当我尝试像这样在我的 ruby_block 中使用 find_gem 函数时:
ruby_block "find gem" do
block do
gem_bin = Chef::Recipe::find_gem
# or gem_bin = find_gem
end
end
我得到了 NoMethodError:未定义的方法“find_gem”。
也尝试将模块混合到 Chef::Resource::RubyBlock 中,它也不起作用。
class Chef::Resource::RubyBlock
include AppHelper
end
ruby_block "find gem" do
block do
gem_bin = Chef::Resource::RubyBlock::find_gem
# or gem_bin = find_gem
end
end
有没有办法从 ruby_block 调用模块中的函数?或者是否有一个厨师变量来定位库中的文件,这样我就可以在 ruby_block.
谢谢!