ruby - ruby 脚本偶尔出现 "Permission denied @ rb_sysopen"

标签 ruby ubuntu xfs

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

ruby 2.3.1p112

filesystem : 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在这种情况下,这是时间敏感的。你需要进行实验。请注意不要将这段代码变成阻塞代码。

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

关于ruby - ruby 脚本偶尔出现 "Permission denied @ rb_sysopen",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48479281/

相关文章:

ruby-on-rails - 在 Rails 4 中接收 POST 数据并读取 request.body

linux - 如何使服务不需要 super 用户密码输入?

javascript - 如何找到父域和顶级域(iframe)之间的差异以克服跨框架脚本

linux - 如何在 GCE 上的 CentOS 中调整 xfs 大小?

ruby - 如何根据ruby中的特定列表对结果进行排序

ruby-on-rails - Ruby Rack 更改端口

ruby - 为什么 Ruby String.hash 跨机器不一致?

ubuntu - 无法通过蓝牙将 Bose qc35 与 Ubuntu 16.04 配对

postgresql - pgadmin4 指定的用户不存在

google-cloud-platform - 如何在 Google Cloud 中获得更高的磁盘性能?