У меня проблема с запуском Delayed :: Job на Heroku. Большинство заданий, находящихся в очереди для отложенного выполнения, выполняются дважды (иногда только один раз). Поэтому большинство моих писем Sendgrid отправляются в двух экземплярах, и большинство моих транзакций ActiveMerchant пытаются рассчитаться дважды!
На нашем экземпляре Heroku работают 2 рабочих. Стечение обстоятельств? Я думаю, что нам нужно два, потому что у нас также есть cron для резервных копий и прочего.
Задания, которые выполняются дважды, выполняются прямо друг над другом (неизмеримо близко). Это состояние гонки, но вызвано чем?
Особенности:
$ heroku stack
aspen-mri-1.8.6
bamboo-mri-1.9.2
* bamboo-ree-1.8.7
cedar (beta)
Мы запустили 10 веб-динамов и имеем базу данных 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)
Я пробовал много разных версий диджея, но это была единственная, которую я смог заставить работать, например, на Heroku.
Буду очень признателен за любые предложения. Это очень плохо для нашего сайта.