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