2

每次操作系统听到文件被添加/拖动/保存在指定文件夹中时,我都想将文档上传到 GoogleDocs,就像 DropBox 在将文件保存在 DropBox 文件夹中时上传文件一样。

这在 Ruby 中需要什么,有哪些部分?

  • 保存文件时如何收听?
  • 当一个文件被添加到一个文件夹时,你如何监听?

我了解如何使用 GoogleDocs API 并在收到这些事件后上传内容,但我不确定这将如何工作。

更新

虽然我仍然不知道如何检查文件是否已添加到目录中,但现在监听文件何时保存非常简单,这要感谢Guard for ruby​​。

4

6 回答 6

3

如果我遇到这种情况,我会使用 git 或 bzr 之类的东西来处理版本检查,然后从你的脚本中调用 add 然后 commit 并监视哪些文件已更改(因此需要上传)。

这增加了对文件的完整版本控制的好处,并且它主要是跨平台的(如果您为每个平台包含二进制文件)。

请注意,这并不能解决您的听力问题,只是当您知道某些事情发生了变化时您会做什么。您可以安排任务(通过各种路线),但我仍然喜欢在后台使用适当的 VCS 的想法。

我刚发现这个: http: //www.codeforpeople.com/lib/ruby/dirwatch/

你需要仔细阅读它,因为我不能保证它的效率或可靠性。它似乎使用 SQLite,因此最好每 10 秒手动检查一次(或类似的东西)。

于 2009-11-06T23:02:33.657 回答
1

Ruby 不包含“侦听”文件更新的内置方法。如果您想坚持使用纯 Ruby,最好的办法是按固定时间表(例如每 5 分钟)执行上传,而不管文件何时保存。

如果这不是一个可接受的替代方案,您可以尝试用 Java 编写应用程序(或至少它的某些部分),它确实支持这种类型的东西。查看 JRuby 以集成应用程序的 Ruby 和 Java 部分。

于 2009-11-06T23:01:17.663 回答
1

这是一颗纯红宝石:

http://github.com/TwP/directory_watcher

于 2010-03-13T21:35:13.293 回答
0

我不知道这样做的正确方法,但一个简单的技巧是让一个脚本在后台运行,它每 n 分钟检查一堆文件夹的内容,并使用相关的时间戳来确定文件是否被修改在那段时间里

于 2009-11-06T22:52:16.960 回答
0

您肯定需要一些本地操作系统代码来编写监控服务/客户端。如果您希望它是跨平台的,我会选择 C++。例如,如果您决定使用 .Net,则可以使用 FileSystemWatcher 类来实现您所需要的(文档相关文章)。

于 2009-11-06T22:54:02.700 回答
0

有点老线程,但我面临做类似的事情,并想抛出我的想法。我要走的路线是有一个 ruby​​ 脚本来监视给定的目录并检查时间戳。上传所有文件后,脚本会保存最新的时间戳,然后再次轮询目录,检查是否添加了任何文件/文件夹。如果找到文件,则脚本会上传它们并更新全局时间戳等...

缺点是设置一个 ruby​​ 脚本以持续运行(或作为服务)有点痛苦。但这不是一项艰巨的任务,只需要正确考虑即可。

还取决于您的用户是否有足够的能力安装 ruby​​,或者您是否必须将所有内容打包到一键式安装程序中。对我来说,这是最难弄清楚的部分。

于 2012-07-31T02:32:50.247 回答