我有一组需要在执行其他rake任务后运行的数据库管理任务。所以我阅读了Ruby Mongo driver source和一些博客文章,最后我得到了这段代码:
scr = open("./scripts/update_stats.js", &:read)
db = Mongoid::Config::master
result = db.command({:$eval => scr})
logger.debug result
logger.warn "Finished updating stats"
在脚本中我有几个函数,然后是最后一个函数:
r = update_stats();
print("update result:");
print (r);
好的,所以当我通过命令行直接运行时,它运行正常。嗯,似乎是。但我想取结果值并将其存入我的日志中。我可以将值存储到数据库中,然后我想把它拉出来。似乎应该有更好的方法。我做的是我的日志是:
DEBUG 2012-01-03 22:27:03 -0800 (21392) {"retval"=>nil, "ok"=>1.0}
除了它没有爆炸之外,这并没有告诉我什么。那么,我如何获得update_stats
的返回值并将其记录在我的Ruby代码中?
答案 0 :(得分:1)
好的,所以这里有两个潜在的问题。
第一个问题是您正在针对数据库运行JS文件,但我不清楚它是如何工作的。它看起来像Mongoid的一些特殊功能?你期待什么结果?
第二个问题是,如果rake机器具有驱动程序访问权限,则根本不清楚为什么要使用JS文件。您运行的命令不能直接通过Ruby驱动程序作为命令运行吗?
一般情况下,您需要引入任意JS文件的唯一时间是直接通过mongo
程序调用作业。所以你可以从mongo my_map_reduce.js
工作运行cron
,这是有道理的。
如果您正在运行的命令可以通过驱动程序访问( 99%的时间都是如此)。然后在Ruby中编写整个管理脚本。