【发布时间】:2014-01-17 02:41:03
【问题描述】:
我正在开发一个说明书来部署一个简单的 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.
谢谢!
【问题讨论】:
-
确保将模块混入
Chef::Resource,而不是像您的代码实际所说的那样混入Chef::Recipe。 -
糟糕...这是我的错字。应该是 Chef::Recipe。实际上,我已经尝试将模块混合到 Chef::Resource::RubyBlock 中。
-
通过dot调用方法呢?
Chef::Resource::RubyBlock.find_gem
标签: chef-infra cookbook