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 ライブラリに渡している可能性があります。

2つ目のエラー

「1334865999.4416242」(ArgumentError) から「時刻」を判別できません

Time インスタンスに変換できない文字列が渡されると文句を言う rufus-scheduler です。

次のようなものを試してください

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

要約すると、2 つの異なるエラーが表示されます。それらを次々に修正します。中心にあるものから始めましょう: 文字列の代わりに渡された nil について Curl が不平を言っている場合は、starttime の問題を見てください。

乾杯、

ジョン

于 2012-04-20T04:07:04.930 に答える