gpt4 book ai didi

ruby - Chef - Dir.exists? guard 将符号链接(symbolic link)视为目录

转载 作者:数据小太阳 更新时间:2023-10-29 07:33:43 24 4
gpt4 key购买 nike

我有一个删除空日志目录的方法,然后在下一步中用符号链接(symbolic link)替换它。

directory "#{ENV['GS_HOME']}/logs/" do
action :delete
only_if { ::Dir.exists?("#{ENV['GS_HOME']}/logs/") }
end

它第一次工作,但在下一次 chef-client 运行时,当它不应该删除现在链接到另一个目录的项目时,我收到一个错误:

Errno::ENOTDIR
--------------
Not a directory @ dir_s_rmdir ...

为什么守卫似乎将链接视为目录而不是跳过,但资源操作正确识别它,而不是一个,并失败?解决这个问题的最佳方法是什么?

最佳答案

第一次,守卫检查它是否是一个目录。随后运行它可以检查文件目录是否是符号链接(symbolic link)。尝试

directory "#{ENV['GS_HOME']}/logs/" do
action :delete
only_if { ::Dir.exist?("#{ENV['GS_HOME']}/logs/") || !::File.symlink?("#{ENV['GS_HOME']}/logs/") }
end

关于ruby - Chef - Dir.exists? guard 将符号链接(symbolic link)视为目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com