Ruby “刀引导”;没有这样的文件或目录@dir_initialize";从将文件从本地目录放入站点包的配方

Ruby “刀引导”;没有这样的文件或目录@dir_initialize";从将文件从本地目录放入站点包的配方,ruby,amazon-ec2,directory,chef-infra,knife,Ruby,Amazon Ec2,Directory,Chef Infra,Knife,我在cookbook中有一个default.rb文件,我正试图用它来引导ec2实例,并且我正试图通过这个chef cookbook将网站包从我一直使用的本地虚拟环境移动到服务器上 这是因为我们的组织对如何将包放到生产节点上非常严格,所以我必须实际移动我想要使用的任何库。很可能有更好的方法来完成我正在尝试做的事情,我非常愿意听取建议,但目前,我遇到的问题是,我不知道如何引用foreach循环中的本地目录,因此它一直尝试引用服务器上的文件夹,但由于某种原因,我想它还没有被创建,即使我的代码在代码之后

我在cookbook中有一个default.rb文件,我正试图用它来引导ec2实例,并且我正试图通过这个chef cookbook将网站包从我一直使用的本地虚拟环境移动到服务器上

这是因为我们的组织对如何将包放到生产节点上非常严格,所以我必须实际移动我想要使用的任何库。很可能有更好的方法来完成我正在尝试做的事情,我非常愿意听取建议,但目前,我遇到的问题是,我不知道如何引用foreach循环中的本地目录,因此它一直尝试引用服务器上的文件夹,但由于某种原因,我想它还没有被创建,即使我的代码在代码之后移动到那里

总的来说,我被这个错误弄糊涂了,如果能解释一下为什么第一块代码应该把文件夹移到那里,而文件夹却不存在,我将不胜感激

此default.rb文件的代码如下:

#
# Cookbook:: <cookbook_name>
# Recipe:: default
#

include_recipe "yum-epel"

# install packages
for dir in ["connector_1", "connector_2", "connector_3", "json_logger", "connector_4", "site-packages"] do
  remote_directory "/usr/lib/python2.7/site-packages/#{dir}" do
    source "app_packages/#{dir}"
    files_mode "0655"
    mode "0755"
  end
end

# install required site packages

Dir.foreach('/usr/lib/python2.7/site-packages/site-packages/') do |dir|
  next if not dir.end_with?('.dist-info')
    remote_directory "/usr/lib/python2.7/#{dir}" do
      source "app_packages/site-packages/#{dir}"
      files_mode "0655"
      mode "0755"
    end
end

remote_directory "/home/app-automation/bin/app_deployment" do
  source "app_deployment"
  files_owner "app-automation"
  files_group "app-automation"
  files_mode "0660"
  owner "app-automation"
  group "app-automation"
  mode "0770"
end
#
#食谱::
#配方::默认值
#
包括食谱“yum epel”
#安装软件包
对于[connector_1”、“connector_2”、“connector_3”、“json_logger”、“connector_4”、“站点包”]中的目录
远程目录“/usr/lib/python2.7/site packages/#{dir}”do
来源“app_packages/#{dir}”
“0655”模式下的文件
模式“0755”
结束
结束
#安装所需的站点软件包
Dir.foreach('/usr/lib/python2.7/site packages/site packages/')do|Dir|
下一个if not dir.end_与?(“.dist info”)
远程目录“/usr/lib/python2.7/#{dir}”do
来源“应用程序包/站点包/{dir}”
“0655”模式下的文件
模式“0755”
结束
结束
远程目录“/home/app automation/bin/app\u部署”do
来源“应用程序部署”
文件所有者“应用程序自动化”
文件组“应用程序自动化”
“0660”模式下的文件
所有者“应用程序自动化”
组“应用程序自动化”
模式“0770”
结束

您正在将ruby代码与chef dsl混合使用。它的行为与您预期的不同,因为围绕chef dsl的ruby代码按您预期的方式执行。

那么我是否必须让两个不同的配方一个接一个地运行,而不是尝试在一个配方中完成所有操作?