我对厨师和Ruby都是新手,我正在实施一些脚本来学习它们。 现在,我正面临着如何组织我的代码的问题:我已经在库目录中创build了一个类,并且使用了自定义名称空间来维护顺序。 这是我的文件的一个简化的例子:
# ~/chef-repo/cookbooks/mytest/libraries/MyTools.rb module Chef::Recipe::EP class MyTools def self.print_something( text ) puts "This is my text: #{text}" end def self.copy_file( dir, file ) cookbook_file "#{dir}/#{file}" do source "#{dir}/#{file}" end end end end
从我的食谱我称这两种方法:
# ~/chef-repo/cookbooks/mytest/recipes/default.rb EP::MyTools.print_something "Hello World!" EP::MyTools.copy_file "/etc", "passwd"
print_something工作正常,但与copy_file我得到这个错误:
undefined method `cookbook_file' for Chef::Recipe::EP::FileTools:Class
我很清楚,我不知道如何在厨师里创build图书馆,或者我不知道一些基本的假设。 任何人都可以帮我吗? 我正在寻找这个问题的解决scheme(组织我的代码,库,在类中使用资源),或者更好的,一个好的厨师文档,因为我发现文档非常缺乏清晰和杂乱无章,所以通过它的研究是一个痛苦。
错误消息意味着你的类中没有cookbook_file方法。 模块名称并不意味着类的inheritance,它们只是提供独立的命名空间。 如果你想访问厨师的方法,你需要inheritance适当的厨师类。 学习ruby和厨师是一个很大的吞咽。 写一个有效的图书馆需要一些时间,大部分不应该被要求。
厨师的工作stream程尚未标准化。 还有一些不同的方法仍在争夺最佳实践。
不过,我build议你从Berkshelf开始。 它将为您build立一个基本的食谱结构。
berkshelf教程(由于限制,不能发布真实的url)
misheska.com/blog/2013/06/16/getting-started-writing-chef-cookbooks-the-berkshelf-way/
厨师文件正在清理过程中。 这里有一些比较不完整的文档,很难知道目前的情况。 目前大部分工作正在进入这个网站: