我对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
对不起,我必须有点混淆,因为有些东西不是开源的。
答案 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)
答案 3 :(得分:1)
您粘贴的代码段确实不足以提供信息(需要上下文;代码段在哪里?)
那说directory
看起来更像是一种方法而不是一种类。首先,它是小写的,类是CamelCased。
如果是方法,则在应用程序中的某处定义。你尝试过这样的事情:
grep -r "def directory" ./
或
grep -r "directory" ./| grep "def"
如果不在应用程序本身,它将在应用程序的一个依赖项中定义(grep -r "..." $GEM_HOME/gems
而不是)