1

現在、スクリプトの実行日から 1 か月で有効期限が切れるサブスクリプションを夜間スクリプトがチェックする課金システムを使用しています。たとえば、次のようになります。

 Subscription.where(:expires => (Date.today + 30.days)).find_each do |sub|
  unless sub.month_reminder_sent
    reminder.total += 1
    reminder.subscriptions << sub
    BillingMailer.monthly_reminder(sub.user).deliver
    sub.month_reminder_sent = true
  end

そして、有効期限の 1 週間前に実行する別のセットがあります。更新されていない場合、サブスクは自動的に期限切れになります (サブスクsub.expiry_dateがアクティブかどうかを確認するために、まだ経過していないことを確認するだけです)。

サーバーがダウンした場合に備えて、どのような不測の事態に備える必要がありますか? または、スクリプトが実行されないか失敗しますか? (そのため、一部のレコードが欠落しています。)

上記は、請求を行うための最良の方法でもありますか? それとも、私は不必要に心配していて、上記で十分でしょうか?

4

1 に答える 1

0

チェック中に更新する必要がある別の日付列をモデル(つまり、processed_date)に追加してから、すべての期限切れレコードと以前に処理されなかったレコードを処理する条件をスクリプトに追加します。サーバーがダウンした場合、またはスクリプトが正しく実行されなかった場合は、次回、失われたレコードを処理します。また、いくつかのレポート、つまり、処理されたレコードの数、以前の実行から処理されたレコードの数なども考慮してください。

于 2013-02-04T21:00:01.970 に答える