1

我希望这是一个简单的。

我运行一个 Rails 网络应用程序,我在其中托管了大约 100 个学校网站。一个应用程序处理所有网站,我有一个管理界面,我们可以在其中添加和删除学校等......

我想在这个界面中添加一个统计数据,即该学校使用的总磁盘空间。每个学校的文件都存储在单独的目录结构中,以便于查找。唯一的问题是我需要它快速。所以问题是找到这些信息的最快方法是什么。如果可以通过即时调用 ruby​​ 找到它,那就太好了,但我愿意接受任何可行的方法。理想情况下,我希望避免缓存和后台生成这些数据(至少在 rails 级别)。:)

4

3 回答 3

4
`du -s "/your/path/here"`.split("\t").first.to_i #returns bytes
于 2013-03-27T13:27:48.697 回答
3

如果你想使用纯 Ruby,你可以试试这个代码。虽然如果您正在寻找速度,我肯定du会更快。

def dir_size(dir_path)
  require 'find'
  size = 0
  Find.find(dir_path) { |f| size += File.size(f) if File.file?(f) }
  size
end

dir_size('/tmp/')
于 2010-09-03T00:05:04.083 回答
0

您是否尝试过按需在每个目录上运行 du ?在我老化的盒子上,我可以在 ~4ms 内对 15M 目录执行 du,在 ~50ms 内完成 250M 目录。对于手头的任务,这两者似乎都是合理的。目录有多大?在您尝试真正优化它之前,请确保它真的值得您花时间。YAGNI 等等。

当他们为您提供文件时,您可以随时跟踪上传。这样,您只需要在添加或删除文件时跟踪增量。

于 2010-09-02T23:53:56.150 回答