Heroku でメールを配信するために Delayed Job を使用しており、さまざまなフックの後処理を実行できるようにする必要があります。以下のコードは、開発環境では問題なく動作しますが、Heroku で実行すると実行に失敗します。
class Notification < ActiveRecord::Base
# Handler for Delayed Notifications Hooks
#- takes in a Delayed::Job object and an optional exception
def self.processed!(job,exception=nil)
pay = job.payload_object.args
# ... do something with the payload object here
end
class << self
def deliver(method,to,ref_obj)
to.each do |email|
n = Notification.new(:method => method,:to => email,:delivery=>'email')
n.obj = ref_obj
n.save
# This is where we send the actual email via ActionMailer
Email.send(method, n).deliver
end
end
handle_asynchronously :deliver
# Failure handler for Delayed::Job.
# Marks our Notification Object as failed
def error(job,exception)
Notification.processed!(job,exception)
end
# Success handler for Delayed::Job.
# Marks our Notification Object as sent
def success(job)
Notification.processed!(job)
end
end
end
そして、これは呼び出しが行われている方法です:
user = User.find() # Fetch a user object
Notification.deliver('joined','someone@email.com',user)
電子メールは Email.joined を介して適切に送信され、Delayed Job レコードはデータベースから正常に削除されますが、Delayed Job フックsuccess
は呼び出されません。
繰り返しますが、これは開発では完全に機能しますが、Heroku にデプロイすると機能しません。