1

大家见鬼。我需要一些关于我正在编写的似乎不起作用的 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)>'
4

1 回答 1

2

好的,

第一个错误与 rufus-scheduler 无关。可能是您将 nil “url”传递给 Curl 库。

第二个错误

无法确定“在”时间:“1334865999.4416242”(ArgumentError)

是 rufus-scheduler 抱怨传递了一个不能变成 Time 实例的字符串。

尝试类似的东西

starttime = REXML::XPath.first(doc, '/new/time/text()').to_f

因此,总而言之,您会看到两个不同的错误。一个接一个地修复它们。从核心开始:Curl 抱怨传递了一些 nil 而不是字符串,然后查看 starttime 问题。

干杯,

约翰

于 2012-04-20T04:07:04.930 回答