如何使用Ruby脚本模仿DropBox功能?

时间:2009-11-06 22:48:19

标签: ruby daemon google-docs dropbox

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

这对Ruby有什么影响,有哪些部分?

  • 如何保存文件?
  • 如何在将文件添加到文件夹时收听?

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

更新

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

6 个答案:

答案 0 :(得分:3)

如果我遇到这个问题,我会使用像git或bzr这样的东西来处理版本检查,然后从脚本中调用add then commit并监视哪些文件已经更改(因此需要上传)。

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

请注意,这不会处理您的听力问题,只会在您知道某些内容发生变化时执行的操作。您可以安排任务(通过各种路线),但我仍然喜欢在引擎盖下使用正确的VCS。

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

你需要阅读它,因为我无法保证它的效率或可靠性。它似乎使用SQLite,因此最好每10秒手动检查一次(或沿着这些行的某些东西)。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

这是一个纯粹的红宝石宝石:

http://github.com/TwP/directory_watcher

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您肯定需要一些本机操作系统代码来编写监控服务/客户端。如果你想让它成为跨平台,我会选择C ++。例如,如果您决定使用.Net,则可以使用FileSystemWatcher类来实现所需(documentation,这里是related article)。

答案 5 :(得分:0)

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

缺点是设置ruby脚本以便持续运行(或作为服务)有点痛苦。但这不是一项压倒性的任务,只需要妥善考虑。

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