Ruby 在 linux 文件系统上索引文件的进程
Ruby process to index files on a linux filesystem
我正在开发一个小型照片共享 Rails 应用程序,它将从本地文件系统上的照片库中读取和显示照片。
为了避免每次用户加载页面时都扫描文件系统,我想设置一个每小时一次的 cron 作业来索引所有文件并将其存储在本地 MySQL table。
扫描本地文件系统和存储有关本地文件的元数据(例如大小、文件类型、修改日期等)的最佳方法是什么?有方便的基于 ruby 的库吗?我还希望能够 "watch" 文件系统了解自上次扫描以来文件何时消失,以便它们可以从我的 table 中删除。
谢谢!
您会想要查看 inotify
。
https://github.com/nex3/rb-inotify
你可以在一个文件或目录上设置一个watch
(在Linux内核中注册一个回调),每当那个file/directory中有什么变化时,内核都会通知您会立即获得已更改内容的列表。
此处列出了常见事件:https://en.wikipedia.org/wiki/Inotify
您会注意到 IN_CREATE
+ IN_DELETE
是您要查找的事件。
旁注:IN_CREATE
仅创建文件(它仍然是空的),您需要等到调用 IN_CLOSE_WRITE
才能知道数据已完成写入文件。
我正在开发一个小型照片共享 Rails 应用程序,它将从本地文件系统上的照片库中读取和显示照片。
为了避免每次用户加载页面时都扫描文件系统,我想设置一个每小时一次的 cron 作业来索引所有文件并将其存储在本地 MySQL table。
扫描本地文件系统和存储有关本地文件的元数据(例如大小、文件类型、修改日期等)的最佳方法是什么?有方便的基于 ruby 的库吗?我还希望能够 "watch" 文件系统了解自上次扫描以来文件何时消失,以便它们可以从我的 table 中删除。
谢谢!
您会想要查看 inotify
。
https://github.com/nex3/rb-inotify
你可以在一个文件或目录上设置一个watch
(在Linux内核中注册一个回调),每当那个file/directory中有什么变化时,内核都会通知您会立即获得已更改内容的列表。
此处列出了常见事件:https://en.wikipedia.org/wiki/Inotify
您会注意到 IN_CREATE
+ IN_DELETE
是您要查找的事件。
旁注:IN_CREATE
仅创建文件(它仍然是空的),您需要等到调用 IN_CLOSE_WRITE
才能知道数据已完成写入文件。