Ruby 如何在使用远程文件时检测文件更新

Ruby 如何在使用远程文件时检测文件更新,ruby,chef-infra,chef-recipe,Ruby,Chef Infra,Chef Recipe,我在for循环中使用远程_文件来遍历部署文件(在节点属性中指定)。我验证给定的校验和(sha256sum),以查看现有文件是否相同;如果没有,我会更新它们;如果相同,它只是跳过 我需要知道,在配方中,是否有任何文件已更新,以便在部署目录下的任何文件发生更改时重新启动app server 是否有我可以使用的默认属性(它告诉我所有文件更新都被跳过了),或者最好的方法是什么 谢谢 node['app']['deployments'].each do |file, value| remote

我在for循环中使用远程_文件来遍历部署文件(在节点属性中指定)。我验证给定的校验和(sha256sum),以查看现有文件是否相同;如果没有,我会更新它们;如果相同,它只是跳过

我需要知道,在配方中,是否有任何文件已更新,以便在部署目录下的任何文件发生更改时重新启动app server

是否有我可以使用的默认属性(它告诉我所有文件更新都被跳过了),或者最好的方法是什么

谢谢

node['app']['deployments'].each do |file, value|  
    remote_file "/apps/deployments/#{value['file-name']}" do  
        source   "file:///tmp/deployments/#{value['file-name']}"  
        checksum value['check-sum']
    end 
end  
在厨师中有一个概念,在这种情况下可以帮助您:

node['app']['deployments']
远程_文件“/apps/deployments/#{value['file-name']}”do
来源“file:///tmp/deployments/#{value['file-name']}
校验和值['check-sum']
通知:重新启动“服务[appserver]”
结束
结束
服务“appserver”
只要您不提供
:立即
参数给
通知
,chef客户端将对所有通知进行排队,并在chef运行结束时执行一次通知(即重新启动服务)。

有in-chef的概念,在这种情况下可帮助您:

node['app']['deployments']
远程_文件“/apps/deployments/#{value['file-name']}”do
来源“file:///tmp/deployments/#{value['file-name']}
校验和值['check-sum']
通知:重新启动“服务[appserver]”
结束
结束
服务“appserver”

只要您不提供
:立即
参数给
通知
,chef客户端将对所有通知进行排队,并在chef运行结束时执行一次(即重新启动服务)。

谢谢,但是我需要知道是否有任何文件被更新,并且只有其中一个文件被更新时才重新启动。Chef将自动执行此操作。如果没有更新任何文件,它将永远不会通知
服务
资源。如果所有文件都已更新,它将通知它多次,但最后只重新启动一次。换句话说,只有在资源更新时才会触发通知(在您的情况下:文件更改)。谢谢,但我需要知道是否有任何文件已更新,并且仅在其中一个文件更新时重新启动Chef将自动执行此操作。如果没有更新任何文件,它将永远不会通知
服务
资源。如果所有文件都已更新,它将通知它多次,但最后只重新启动一次。换句话说,只有在资源更新时才会触发通知(在您的情况下:文件更改)。