Heroku での Delayed::Job の実行に問題があります。遅延実行のためにキューに入れられたジョブのほとんどは、 2 回(場合によっては 1 回だけ) 実行されます。そのため、ほとんどの Sendgrid メールは重複して送信され、ActiveMerchant トランザクションのほとんどは 2 回決済しようとします。
Heroku インスタンスで 2 つのワーカーを実行しています。一致?バックアップなどのための cron も持っているので、2 つ必要だと思います。
2 回発生するジョブは、互いに重なり合って発生します (計り知れないほど近い)。競合状態ですが、原因は何ですか?
詳細は次のとおりです。
$ heroku stack
aspen-mri-1.8.6
bamboo-mri-1.9.2
* bamboo-ree-1.8.7
cedar (beta)
10 の Web dyno を実行し、Ronin データベースを持っています。プラグインに関しては、次のものがあります。
Basic Release Management FREE
Cron Daily Cron FREE
Custom Domains FREE
Expanded Logging FREE
Hostname SSL 20.00 PER MONTH
PG Backups Basic FREE
Sendgrid Pro 20.00 PER MONTH
Shared Database 5MB FREE
Gemfile で:
gem 'rails', '3.0.6'
gem 'delayed_job', :git => 'git://github.com/collectiveidea/delayed_job.git', :tag => 'v2.1.2' # 3.x doesn't seem to work with Heroku
私のハンドラーは次のようになります。
class OrderEmailJob < Struct.new(:order_id, :email_type)
def perform
OrderMailer.send(email_type, Order.find(order_id)).deliver
end
end
次のようにキューに入れられます。
Delayed::Job.enqueue OrderEmailJob.new(self.id, :order_confirmation)
さまざまなバージョンの DJ を試しましたが、Heroku で動作するようになったのはこれだけでした。
提案をいただければ幸いです。これは当サイトにとって非常に悪いことです。