诅咒大家。我需要一些帮助,我正在编写一个似乎不起作用的ruby脚本。简单地说,我在使用Rufus安排在某个特定时间发生某些事情时会遇到错误。
这是我的代码。
starttime = Time.new + (60)
scheduler = Rufus::Scheduler.start_new
scheduler.at starttime do
Curl::Easy.download(url, filename = "/tmp/test.xml")
end
虽然有效,但在第一次运行后会出现错误:
================================================================================
scheduler caught exception:
can't convert nil into String
/Users/me/.gem/ruby/1.9.1/gems/curb-0.8.0/lib/curl/easy.rb:38:in `add'
/Users/me/.gem/ruby/1.9.1/gems/curb-0.8.0/lib/curl/easy.rb:38:in `perform'
/Users/me/.gem/ruby/1.9.1/gems/curb-0.8.0/lib/curl/easy.rb:358:in `download'
/Users/me/Dropbox/Files/Personal/RubyMine/hbo_hackathon/SOME:19:in `block (2 levels) in <top (required)>'
我对Ruby(以及一般的开发)很新,所以我不确定为什么会这样。有人可以帮忙吗?
此外,这里的真正目标是替换这一行:
starttime = Time.new + (60)
这一行:
starttime = REXML::XPath.first( doc, '/new/time/text()')
之所以这样,是因为我希望从某些XML中获取动态时间(在这种情况下,是我订阅的Amazon SQS队列中的消息),并告诉它在特定时间卷曲URL 。这才是我努力实现这一目标的真正原因。
当我尝试从XML中传递时间时,我得到一个完全不同的错误。我尝试过发送各种类型的时间格式,但它仍然给我一个错误。请帮忙!
/Users/me/.gem/ruby/1.9.1/gems/rufus-scheduler-2.0.16/lib/rufus/sc/rtime.rb:327:in `at_to_f': cannot determine 'at' time from : "1334865999.4416242" (ArgumentError)
from /Users/me/.gem/ruby/1.9.1/gems/rufus-scheduler-2.0.16/lib/rufus/sc/jobs.rb:253:in `determine_at'
from /Users/me/.gem/ruby/1.9.1/gems/rufus-scheduler-2.0.16/lib/rufus/sc/jobs.rb:90:in `initialize'
from /Users/me/.gem/ruby/1.9.1/gems/rufus-scheduler-2.0.16/lib/rufus/sc/me.rb:149:in `new'
from /Users/me/.gem/ruby/1.9.1/gems/rufus-scheduler-2.0.16/lib/rufus/sc/scheduler.rb:149:in `at'
from /Users/me/Dropbox/Files/Personal/RubyMine/hbo_hackathon/SOME:18:in `block in <top (required)>'
答案 0 :(得分:1)
行,
第一个错误与rufus-scheduler无关。这可能是你将一个零“url”传递给Curl库。
第二个错误
无法确定'at'时间:“1334865999.4416242”(ArgumentError)
是rufus-scheduler抱怨传递一个它不能变成Time实例的字符串。
尝试类似
的内容starttime = REXML::XPath.first(doc, '/new/time/text()').to_f
因此,总而言之,您会看到两个不同的错误。一个接一个地修复它们。从心里的那个开始:Curl抱怨一些nil而不是一个字符串,然后查看starttime问题。
干杯,
约翰