首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Griddler gem在解析传入的电子邮件时抛出异常

Griddler gem在解析传入的电子邮件时抛出异常
EN

Stack Overflow用户
提问于 2014-11-14 18:02:32
回答 1查看 421关注 0票数 0

我已经集成了Sendgrid传入的解析Web钩子API,它正确地将电子邮件对象发布到我的rails应用程序中。在应用程序上,我使用griddler来捕获和进一步处理电子邮件数据。但我得到的例外是:

代码语言:javascript
复制
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中有流程实例方法时

代码语言:javascript
复制
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

代码语言:javascript
复制
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的版本:

代码语言:javascript
复制
#Process incoming mail from sendgrid smtp server
gem 'griddler', "~> 1.1.0"
gem 'griddler-sendgrid', "~> 0.0.1"

这是基于griddler github上可用的文档

有人能帮我解决我在这里缺少的东西吗。另外,为什么我在日志中看不到下面一行呢?

代码语言:javascript
复制
"initialized Email Processor\n\n\n\n\n\n\n\n"

下面是要定义路由的行

代码语言:javascript
复制
mount_griddler

编辑:据我所知,rails不直接添加任何此类类。奇怪的是,我能够在“rails控制台”中看到“EmailProcessor”类可用的“process”方法:

代码语言:javascript
复制
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]

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-15 10:09:31

问题是,rails应用程序启动时没有加载EmailProcessor类。在application.rb中添加以下行执行了神奇的操作:

代码语言:javascript
复制
 config.autoload_paths += %W(#{config.root}/app/mailers/email_processor.rb)

注意:每次更改email_processor.rb时,都需要重新启动服务器。

感谢Joel (“格瑞德勒”的作者)回复我的个人邮件并指出问题:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26936183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档