红宝石脚本的"Permission denied @ rb_sysopen"



我正在开发一个 ubuntu 16.04 盒子:

红宝石 2.3.1p112

文件系统 : XFS

我编写了一个Ruby脚本,它将小而独特的文本文件写入一组文件夹,每次写入将在大约5秒内发生,并且每次要写入的文件夹都是随机的。

但是有时会发生此错误:

"Permission denied @ rb_sysopen" 

奇怪的是,它可能发生在一分钟左右可以正常写入而不会出错的同一文件夹中。 所以这与文件权限无关。

我还通过"xfs_repair"卸载了相关磁盘以进行磁盘检查,没有发现任何异常,并且在我重新安装后,相同的错误会以不规则的方式出现。

请问有什么提示吗?

无法推测根本原因,但如果您绝对确定这是一个暂时性问题,并且只需要使其正常工作,则可以尝试 Ruby 的retry

def write_file(file, content)
  File.write(file, content)
rescue Errno::EACCES
  retry
end

我还会添加重试限制,以防万一这不是暂时的。

def write_file(file, content)
  retries ||= 3
  return if (retries -= 1) == 0
  File.write(file, content)
rescue Errno::EACCES
  retry
end

您可能还需要在其中扔一个sleep,以防这对时间敏感。你需要实验。只是要注意不要将这块变成阻止代码。

显然,这种蛮力远非理想,但有时你必须做你必须做的事情。

相关内容

  • 没有找到相关文章

最新更新