无法弄清楚ruby方法“目录”及其功能

时间:2012-10-18 15:19:22

标签: ruby chef

我对ruby很新,当我遇到这个片段时,我试图理解一些代码:

directory "test_dir" do
    action :create
    recursive true
end

我尝试使用谷歌搜索directory课程,但没有成功。我找到了一个班级Dir,但它不一样。我直观地看到这个片段应该创建一个新目录,并将其命名为test_dir,但我不想假设并继续前进。

修改 这是用于启动特定任务的厨师食谱的一部分。出于启动的目的,它需要创建一个目录并下载一些罐子。下面有一个execute方法,如下所示:

execute 'deploy' do
    action :nothing
    # ignore exit status of storm kill command
    command <<-EOH
      set -e
      storm kill #{name} -w 1 || true
      sleep 3
      storm jar #{points to the jar}
    EOH
end

对不起,我必须有点混淆,因为有些东西不是开源的。

4 个答案:

答案 0 :(得分:1)

这是用于目录管理的Chef内部DSL。在此处阅读更多内容:http://wiki.opscode.com/display/chef/Resources#Resources-Directory

PS:recursive true告诉它创建与mkdir -p非常相似的文件夹。

答案 1 :(得分:1)

directory不是一个类,它是一种方法。我不知道它是哪个模块的一部分,但该片段大致相当于:

Kernel.directory.call("test_dir",lambda {action :create; recursive true})

该代码片段使用了一些将directory方法添加到内核对象的gem。

正如其他人所提到的,它是目录管理DSL Chef的一部分。 DSL是集成到Kernel对象中的一组方法;因为调用Ruby的语法非常灵活,所以方法调用看起来很像语言关键字。这使得特定于任务的命令(Domain Specific Languages:DSL)在Ruby中看起来非常好;易于使用和灵活。因此,添加DSL的宝石非常普遍。

答案 2 :(得分:1)

它是Directory框架的Chef资源。 (DSL代表特定领域的语言.Ruby非常适合他们。)

答案 3 :(得分:1)

您粘贴的代码段确实不足以提供信息(需要上下文;代码段在哪里?)

那说directory看起来更像是一种方法而不是一种类。首先,它是小写的,类是CamelCased。

如果是方法,则在应用程序中的某处定义。你尝试过这样的事情:

grep -r "def directory" ./

grep -r "directory" ./| grep "def"

如果不在应用程序本身,它将在应用程序的一个依赖项中定义(grep -r "..." $GEM_HOME/gems而不是)