Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
厨师食谱中使用了哪些ruby功能?_Ruby_Syntax_Chef Infra - Fatal编程技术网

厨师食谱中使用了哪些ruby功能?

厨师食谱中使用了哪些ruby功能?,ruby,syntax,chef-infra,Ruby,Syntax,Chef Infra,我刚开始使用chef,对ruby不太了解 我在理解食谱中使用的语言语法方面有问题 比如说,我在recipes/default.rb中的一本食谱中创建了一个目录,如下所示: directory "/home/test/mydir" do owner "test" mode "0755" action :create recursive true end 我假设这是有效ruby脚本的一部分。像owner“test”这样的行是什么意思?这完全是一个函数调用、变量赋值还是其他什么?Ch

我刚开始使用chef,对ruby不太了解

我在理解食谱中使用的语言语法方面有问题

比如说,我在recipes/default.rb中的一本食谱中创建了一个目录,如下所示:

directory "/home/test/mydir" do
  owner "test"
  mode "0755"
  action :create
  recursive true
end

我假设这是有效ruby脚本的一部分。像
owner“test”
这样的行是什么意思?这完全是一个函数调用、变量赋值还是其他什么?

Chef是用Ruby编写的,它广泛使用Ruby的功能来设计定制DSL。几乎每个chef配置文件都是用基于Ruby的DSL编写的

这意味着为了有效地使用chef,您应该熟悉Ruby的基本语法,包括

  • 文法
  • 数据类型(与其他语言相比的主要区别是符号)
您不需要对Ruby中的元编程有太多了解

您发布的代码是基于Ruby的DSL的一个很好的例子。让我解释一下

# Call the method directory passing the path and a block
# containing some code to be evaluated
directory "/home/test/mydir" do

  # chown the directory to the test user
  owner "test"

  # set the permissions to 0555
  mode "0755"

  # create the directory if it does not exists
  action :create

  # equivalent of -p flag in the mkdir
  recursive true

end
块是指定一组操作(在本例中为创建、设置权限等)以在单个上下文(在本例中为该路径的上下文)中进行计算的一种方便方法。

让我们将其分解

directory "/home/test/mydir" do
  ...
end
您只需调用Chef定义的名为
目录的全局方法,传递一个参数
“/home/test/mydir”
,以及一个块(介于
do
end
之间的所有内容)


这个区块可能在Chef创建的一个特殊范围内被排除,其中所有选项(
所有者
模式
操作
,等等)都是方法。

您正在阅读哪些文档?主要是互联网:目前我也在学习,以确认我的问题。:)这是一个函数调用。但这并不意味着它不是由
方法\u missing
处理的。
所有者
模式
等都是方法吗?是的,都是Ruby方法。在
所有者
的情况下,
所有者
是方法,
测试“
字符串
参数。我以前在这里回答过一个类似的问题:可能有一些更有价值的信息。