1

我对 ruby​​ 很陌生,当我被困在这个片段时试图理解一些代码:

directory "test_dir" do
    action :create
    recursive true
end

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

编辑 这是用于启动特定任务的厨师食谱的一部分。为了启动的目的,它需要创建一个目录并下载一些 jars 到它。下面有一个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

4 回答 4

1

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

PS:recursive true告诉它创建文件夹很像mkdir -p.

于 2012-10-18T15:30:06.640 回答
1

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

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

该片段使用了一些 gem,它directory向 Kernel 对象添加了一个方法。

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

于 2012-10-18T15:30:44.503 回答
1

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

于 2012-10-18T15:30:58.537 回答
1

您粘贴的片段信息不足以继续(需要上下文;片段来自哪里?)

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

如果它是一种方法,它是在应用程序中的某个地方定义的。你有没有尝试过这样的事情:

grep -r "def directory" ./或者

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

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

于 2012-10-18T15:32:17.543 回答