Lilly
(Lillian )
13
はい、Moin と今日この件について話していたのですが、彼女は「月の長さが異なるため、月次(monthly)を使用するとバグがあるかもしれない」と指摘しました。もちろん、彼女は部分的に正しかったです 
とにかく、少し調べてみました 
コアの plugins/automation/lib/discourse_automation/scripts フォルダにある schedule pm with data-explorer results の自動化スクリプト自体は見つかりませんでした。どこか別の場所に隠れているようです。
しかし、ここにある再帰(recurring)のロジックを見てみました(おそらくそのスクリプトはこのロジックを使っているはずです):plugins/automation/lib/discourse_automation/triggers/recurring.rb:
月次の再帰自動化の基盤となるコードは、実際の暦日ではなく「N 番目の曜日」を計算しており、Calendar day(暦日)との間にロジックの不一致があると考えています。つまり、RRule に BYDAY=#{count}#{byday} を注入することで、自動化が曜日の揃いを強制してしまい、代わりに BYMONTHDAY を使用するべきだということです。
そのため、4 月 15 日(4 月の水曜日の 3 番目にあたります)に自動化を開始するように設定した場合、システムはそのルールを「毎月の水曜日の 3 番目に実行する」と解釈してしまいます。
5 月になると、水曜日の 3 番目は 5 月 20 日となるため、スケジュールが 5 日ずれてしまいます。
さらに、月の 30 日や 31 日(例えば「火曜日の 5 番目」)に自動化を設定した場合、システムは翌月の火曜日の 5 番目を探そうとします。その月に火曜日が 4 回しか存在しない場合、システムは有効な日付を完全に発見できず、その月全体を「静かにスキップ」してしまいます。
テスト済みの修正版を持っており、チームが確認したい場合は PR を作成しています。これは「N 番目の曜日」から「正確な暦日」へのロジック変更です。
以下は、私のテストとデバッグからのスクリーンショットです:
修正なしのインスタンスと、私のロジック修正を適用したインスタンスの 2 つ
両方に全く同じ自動化を作成します(修正版は右側です):
「次の自動化はいつ実行されますか:」と表示されるバナーの違いを確認してください。5 日のズレが生じています。修正されていないバージョンは 5 月 15 日ではなく、水曜日の 3 番目(5 月 20 日)にズレています。
例えば、実際の日付ではなく「木曜日の 4 番目」を探している場合、月が完全にスキップされてしまう可能性があります。
Rails コンソールでも同じ結果を確認できます。
修正前:
修正後:
PR はこちら:
「いいね!」 2