2

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 にデプロイすると機能しません。

4

0 に答える 0