chef在windows上生成一个后台ruby进程

chef在windows上生成一个后台ruby进程,ruby,asynchronous,chef-infra,Ruby,Asynchronous,Chef Infra,使用chef是否可以使用自己的ruby解释器生成一个新的ruby进程?或者,是否可以异步运行ruby代码?我的用例是一个我想要自动执行的安装文件,但它没有静默安装选项。我有一个自动帮助程序,它使用win32ole自动安装 我当前的配方使用的自定义资源如下所示 action :install do # calling automate here happens too soon windows_package 'ESP' do # calling automate here won

使用chef是否可以使用自己的ruby解释器生成一个新的ruby进程?或者,是否可以异步运行ruby代码?我的用例是一个我想要自动执行的安装文件,但它没有静默安装选项。我有一个自动帮助程序,它使用
win32ole
自动安装

我当前的配方使用的自定义资源如下所示

action :install do
  # calling automate here happens too soon
  windows_package 'ESP' do
    # calling automate here won't happen until after the setup
    action :install
    source repo_from_version('sw', new_resource.version)
    installer_type :custom
    only_if { registry_data_exists?(csreg(node), :name => 'Version', :type => :string, :data => '6.0.0') }
  end
end

action_class do
  include MyModule::Helpers # defines automate
end

我想我可以将自动代码放在它自己的文件中,在调用
windows\u package
之前使用spawn创建一个新的ruby进程,并在尝试自动之前让该进程休眠3秒钟。但是,除了内置的chef解释器外,此服务器不会安装ruby。

一般来说,没有。或者更具体地说,chef总体上没有处理异步操作。

为什么不使用ruby_块资源?好的,我想我找到了解决这个问题的方法。使用模板资源创建执行相同操作的powershell脚本,并使用
system()
调用该脚本。使用另一个资源来管理该脚本时,我的问题是,除非我弄错了,否则所有chef资源都会阻塞。当我执行自动化任务时,我需要安装程序正在运行。是的,我们没有用于并发进程执行的东西。您必须使用线程和外壳帮助程序自己构建它,或者找到另一个可以为您实现这一点的gem。