Sendgrid Parse API と Griddler gem を使用して、受信メールを受け入れています。ほとんどの場合、これで問題なく動作します。ただし、ステータス コード 200 で Sendgrid に応答しない場合、Sendgrid はアプリが POST 要求を正しく受信しなかったと見なし、3 日間 POST を試行し続けます。ステータス コードで応答しようとしていますが、問題が発生しています。
通常の RESTful ルートでは、次のようなことができます...
render :status => 200
ただし、これは render メソッドを認識するためにコントローラーで行う必要があると思います。Griddler は、EmailProcessor モデルを作成し、「プロセス」メソッドを使用して電子メールを処理することを提案しています。
私が理解していることから、モデルで render メソッドを使用することはできません。そこで、以下に示すように、クラス メソッドを使用して EmailProcessorsController クラスを作成しました。
class EmailProcessor < ActiveRecord::Base
include ApplicationHelper
def initialize(email)
@email = email
@to = email.to # this is an array
@from = email.from
end
def process
# do other stuff
EmailProcessorsController.render_ok
end
end
class EmailProcessorsController < ActionController::Base
def self.render_ok
render :status => 200
end
end
以下は、アプリから取得したエラーです。render メソッドが気に入らない :(
NoMethodError (undefined method `render' for EmailProcessorsController:Class):
app/controllers/email_processors_controller.rb:6:in `render_ok'
app/models/email_processor.rb:16:in `process'
私は新しい開発者で、これはおそらく非常に単純なものですが、行き詰まっています。問題やデザインに関するご意見やご感想をお待ちしております。ありがとう!
アップデート!
@meagar の提案に従って、以下に示すようにレンダー呼び出しをコントローラーに移動しましたが、別のエラーが発生し、どうすればよいかわかりません。
class EmailProcessorsController < ApplicationController
def initialize(email)
@email = email
@to = email.to # this is an array
@from = email.from
end
def process
# do other stuff
render :status => 200
end
end
render 呼び出しがなければ、エラーは発生しません。render を呼び出すときに発生するエラーは次のとおりです...
Module::DelegationError (ActionController::RackDelegation#status= delegated to @_response.status=, but @_response is nil: #<EmailProcessorsController:0x000001063b1558 @email=#<Griddler::Email:0x00000106378ac8 @params={"headers"=>"Received: by mx-007.sjc1.send