バグ #932
完了periodイベントが2回発火している
説明
以下のプラグインをインストールして試した所、on_periodが連続して2回実行されていました。間隔は1分のようです。
Plugin.create :period_test do on_period do puts Time.now end end
関連するチケット
Satoshi Okuno さんが7年以上前に更新
- 担当者 を Osamu Koga にセット
http://moguno.hatenablog.jp/entry/2015/03/28/161212
on_periodはアカウントごとに発生するので、アカウント関係なく1分周期を作りたいならば下記記述が良いとおもいます。
on_period { |service|
if service == Service.primary
# やりたいこと
end
}
(貴意外していたらすみませんがコメントお願いします。)
Osamu Koga さんが7年以上前に更新
- ステータス を 新規 から レビュー待ち に変更
- 担当者 を Osamu Koga から toshi_a 初音 に変更
既知の問題だったんですね。この現象自体は #916 を追っているときに気づいただけで、フォローイベント大量生成と関連があるかと思っていたのですが、結局別々の問題だったようです。
今の挙動はイベント名とうまく噛み合ってない気がしますが、それぞれのServiceだけにイベントを送るようにするのも簡単ではなさそうですし、World対応で色々変わりそうなので、とりあえずは放置しておくのが良さそうですね。
toshi_a 初音 さんが7年以上前に更新
名前が適切でないという問題はそうなんですが、当初このイベントは一定時間ごとにホームTLやMentionをポーリングするために用意されたものでした。なのでService毎に呼ばれるのは自然なのですが、mikutter 3.0までそのことを忘れていたmikutter作者が、periodを毎分の定期実行のために利用するという誤用を流布しており、厳しい状態です。
Worldの実装が進んできて、periodはすべてのServiceではなく、Twitter Worldの数だけ呼び出すという風にしないと互換性が取れないことが分かってきています。
いっそ実行間隔などを設定できるなどの改良をした仕組みを用意したほうがいいかなとぼんやり考えていたのですが、このチケットを見てperiodは禍根になりそうという気持ちを新たにしました。イメージとしては
timer 1, :minute do
# 1分毎
end
みたいなのが使いやすいかなと思ってたんですが、まだいろいろ考えている段階なので、こんなこともやりたい、といった要望を上げてもらえば、考慮するかもしれません。今は無理なので後で新たにチケット作ると思いますが、先に意見があればここにどうぞ