Twitter からデータをストリーミングし、それを別のアプリケーションにフィードする小さなスクリプトがあります。twitter
そのために、5.0.0.rc.1 リリースの公式の gem を使用しており、ストリーミング機能は実験的であるとフラグが付けられていますが、これは問題ありません。とにかく、それは重要なアプリケーションではありません。
予期しないクラッシュやその他のネットワークの問題などに耐えるようにするために、このスクリプトをgod
(0.13.3) で監視しており、ほとんどの場合、実際に機能します。なんらかの理由で、スクリプトが完全にハングアップし、奇数秒ごとにツイートを受信する必要があるときに、何もしないままになることがあるようです (デバッグ セットアップでは、広く使用されている用語を使用しています)。
ps
としてリストされSs
、0% の CPU とわずか 25MB の RAM を消費します。
gem (または依存関係)に問題がある可能性があるtwitter
と思いますが、今はコードに飛び込んで修正する余裕はありません。
God.watch do |w|
w.name = 'twitter-streamer'
w.env = {
'TWITTER_CONSUMER_KEY' => 'key',
'TWITTER_CONSUMER_SECRET' => 'secret',
'TWITTER_ACCESS_TOKEN' => 'token',
'TWITTER_ACCESS_TOKEN_SECRET' => 'very_secret'
}
w.start = "twitter_streamer --hashtags cheese"
w.keepalive
w.log = File.join APP_HOME, 'log', 'twitter-streamer.log'
end
これが私の時計の定義です。ご覧のとおり、ほぼ本通りです。私が望むのは、プロセスを頻繁に強制的に再起動できる条件です。それは私のニーズにとって許容できる回避策です。
おそらく次のようなもの
# lifecycle
w.lifecycle do |on|
on.condition(:every) do |c|
c.within = 15.minute
c.transition = :restart
end
end
これは:flapping
、プロジェクトのホームページにある条件ブロックのサンプルに基づいています。これを達成する方法はありますか、それとも自分の条件を実装する必要がありますか?