1

私はプロダクション英雄環境でアクションメーラを使用しています。私はそうのようなコンソールを実行すると:actionmailerはコンソールでは動作しますがコントローラでは動作しません

heroku run console 
FamilyMailer.notify_family_member(FamilyMember.last) 

それは完璧に動作し、電子メールを送信します。しかし、コントローラにEXACT SAME行を書くと、メーラーを起動していないようです。メーラー内のputsステートメントはコンソールに表示されません。ここでは、コントローラのアクションは次のとおりです。ここで

def create 
    puts "in the create action" 
    @event = Event.find(params[:event_id]) 
    @event.notify_family_members #from Event model called below 
end 

はイベントモデルである:ここで

class Event < ActiveRecord::Base 
    def notify_family_members 
     puts "in model method" 
     FamilyMailer.notify_family_member(FamilyMember.last) 
    end 
end 

はメーラーである:ここでは

class FamilyMailer < ApplicationMailer 
    default from: "Gold<[email protected]>" 
    def notify_family_member(family_member) 
    puts "in the mailer" 
    mail(to: family_member.email, subject: "Photos").deliver 
    end 
end 

は、サーバーのログです:

2016-04-26T20:00:07.110616+00:00 app[web.1]: Started POST "/api/events" for 69.46.236.36 at 2016-04-26 20:00:07 +0000 
2016-04-26T20:00:07.231857+00:00 app[web.1]: Processing by Api::EventsController#create as HTML 
2016-04-26T20:00:07.231967+00:00 app[web.1]: Parameters: {"event_id"=>7, "event_attendees"=>{"1"=>"Larry Ellison"}, "event"=>{}} 
2016-04-26T20:00:07.242261+00:00 app[web.1]: in the create action 
2016-04-26T20:00:07.444983+00:00 app[web.1]: in model method 
2016-04-26T20:00:07.462242+00:00 app[web.1]: [active_model_serializers] Rendered ActiveModel::Serializer::Null with Event (0.81ms) 
2016-04-26T20:00:07.463231+00:00 app[web.1]: Completed 200 OK in 231ms (Views: 9.4ms | ActiveRecord: 26.9ms) 
2016-04-26T20:00:07.462845+00:00 heroku[router]: at=info method=POST path="/api/events" host=goldenowl.herokuapp.com request_id=d6aeb940-a65a-4667-be1c-263bee9ef899 fwd="69.46.236.36" dyno=web.1 connect=0ms service=359ms status=200 bytes=824 

ご覧のとおり、モデル方法はmailerは無視されているだけです。私も.deliver.deliver_nowに変更しようとしましたが、それは役に立ちません。

これを修正するにはどうすればよいですか?

+0

あなたはログを投稿することができますか? – Pavan

答えて

0

deliverメソッドは、メーラーメソッドで呼び出す必要があります。しかし、deliverを使用する代わりに、deliver_nowまたはdeliver_laterを使用してください。

にあなたのコントローラーを変更し

def create 
    FamilyMailer.notify_family_member(FamilyMember.last).deliver_now 
end 

そして、あなたのメーラー:

class FamilyMailer < ApplicationMailer 
    default from: "Gold<[email protected]>" 
    def notify_family_member(family_member) 
    puts "in the mailer" 
    mail(to: family_member.email, subject: "Photos") 
    end 
end 
+0

ありがとう、これを試しましたが、何も変更されていないようです。メーラーはまだ呼び出されていません。 – Philip7899

+0

@ Philip7899あなたは 'create'メソッドを呼び出していますか? – psantos

+0

私は肯定的です。それはログに記載されています。 – Philip7899

関連する問題