シンプルな 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
レシピ/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: undefined method '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 でモジュールを要求できるように、ライブラリ内のファイルを配置するためのシェフの変数はありますか。
ありがとう!