0

Sendgrid 着信解析 Webhook API を統合しました。メール オブジェクトが Rails アプリに正しく投稿されています。アプリでは、griddler gem を使用してメール データをキャッチし、さらに処理しています。しかし、私は次の例外を取得しています:

Sent mail to chandan@exmaple.com (77.6ms)
F, [2014-11-14T17:48:05.851336 #24799] FATAL -- :
NoMethodError (undefined method `process' for #<EmailProcessor:0x0000000a2ad5f0>):
  griddler (1.1.0) app/controllers/griddler/emails_controller.rb:19:in `public_send'
  griddler (1.1.0) app/controllers/griddler/emails_controller.rb:19:in `process_email'
  griddler (1.1.0) app/controllers/griddler/emails_controller.rb:4:in `block in create'
  griddler (1.1.0) app/controllers/griddler/emails_controller.rb:3:in `each'
  griddler (1.1.0) app/controllers/griddler/emails_controller.rb:3:in `create'
  actionpack (4.1.4) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
  actionpack (4.1.4) lib/abstract_controller/base.rb:189:in `process_action'
  actionpack (4.1.4) lib/action_controller/metal/rendering.rb:10:in `process_action'
  actionpack (4.1.4) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
  activesupport (4.1.4) lib/active_support/callbacks.rb:113:in `call'

/mailer/email_processor.rb にプロセス インスタンス メソッドがある場合

class EmailProcessor
  def initialize(email)
    @email = email
    puts "initialized Email Processor\n\n\n\n\n\n\n\n" # Should see this line in log
  end

  def process
    user = User.find_by_email(@email.from[:email])
    puts @email.inspect and return if user.blank?

    puts "############### @email = #{@email.inspect}###############\n\n\n\n\n\n\n"
  end
end

ここに config/initializer/griddler.rb があります

Griddler.configure do |config|
  config.processor_class = EmailProcessor
  config.processor_method = :process
  config.reply_delimiter = '-- REPLY ABOVE THIS LINE --'
  config.email_service = :sendgrid
end

使用しているgemのバージョンは次のとおりです。

#Process incoming mail from sendgrid smtp server
gem 'griddler', "~> 1.1.0"
gem 'griddler-sendgrid', "~> 0.0.1"

これはgriddler githubで利用可能なドキュメントに基づいています

ここで欠けているものを誰か助けてください。また、ログに次の行が表示されないのはなぜですか?

"initialized Email Processor\n\n\n\n\n\n\n\n"

以下は、ルートを定義する行です

mount_griddler

編集:私の知る限り、レールはそのようなクラスを直接追加しません。奇妙なことに、「rails console」の「EmailProcessor」クラスで使用できる「process」メソッドを確認できます。

2.1.4 :005 > x = EmailProcessor.new(1)
initialized Email Processor\n\n\n\n\n\n\n\n
 => #<EmailProcessor:0x007fc6ae5aee08 @email=1>
2.1.4 :006 > x.methods
 => [:process, :blank?, :present?, ...
2.1.4 :014 > EmailProcessor.instance_methods(false)
 => [:process]

ありがとう

4

1 に答える 1

3

問題は、EmailProcessorRails アプリケーションの起動時にクラスがロードされないことでした。次の行を追加application.rbして魔法を行いました:

 config.autoload_paths += %W(#{config.root}/app/mailers/email_processor.rb)

注: email_processor.rb に変更を加えるたびに、サーバーを再起動する必要があります。

Joel Oliveira ( Griddlerの作者) が私の個人的なメールに返信し、問題を指摘してくれたことに感謝します :)

于 2014-11-15T10:09:31.973 に答える