在Ruby上使用gem pony发送邮件时出错

时间:2018-09-19 16:24:39

标签: ruby rubygems

在初始化.rb时出现此错误

/home/fucc/.rvm/gems/ruby-2.5.1/gems/pony-1.11/lib/pony.rb:250:in `block in build_mail': undefined method `body' for Pony:Module (NoMethodError)

我发送邮件时鳕鱼

def place
# Actually order
Pony.mail(:to => StoreApplication::Admin.email, 
            :from => "My store <mail@gmail.com>",
            :via => :smtp,
            :via_options => {
            adress:             'smtp.gmail.com',
            port:               '587',
            user_name:          'mail@gmail.com',
            password:           '###########',
            authentication:     :plain,
            domain:             "mail.google.com" },
            subject: "New order", body: "Check your admin page")
end

Ruby 2.5.1,Pony 1.12。 我做: -更新所有宝石; -重新安装宝石小马; -上下小马版本

1 个答案:

答案 0 :(得分:3)

答案在您发布的错误消息中:

/home/fucc/.rvm/gems/ruby-2.5.1/gems/pony-1.11/lib/pony.rb:250:in `block in build_mail': undefined method `body' for Pony:Module (NoMethodError)

这意味着在gem的源代码中,在第250行的文件lib/pony.rb中尝试调用方法Pony.body,但是模块Pony没有方法body,因此引发了异常。

在这种情况下,有助于查看the git repository for the gem中的来源。首先要注意的是,该gem的最新版本是1.12,而您正在使用1.11。那么在1.11和1.12之间发生了什么变化,它可以解决此问题吗?

看着history for lib/pony.rb,我看到2017年11月有一个名为“ Fix NoMethodError when pony is used with mail 2.7.0”的提交。此更改修改了lib/pony.rb行250,并更改了body的方法调用。这是引发您所描述错误的确切代码行和方法调用。

解决方案是例如使用pony更新gem update pony的副本,或者如果您使用捆绑器,则更新bundle update。而且,如果在Gemfile中定义了gem,则请确保对其没有版本限制。

我注意到您说您正在使用1.12,并且您曾尝试过向前和向后滚动版本,但这并不准确。您使用的是1.11,所以可以知道,因为错误消息中的路径为gems/pony-1.11。因此,无论它是您的应用程序配置,还是配置为使用1.11。如果仍然无法使您的应用程序使用1.12,请发表评论,说明您如何管理应用程序的gem。

最后,我建议您重新格式化代码,使其更具可读性:

def place
  Pony.mail(
    to: StoreApplication::Admin.email,
    from: 'My store <mail@gmail.com>',
    via: :smtp,
    via_options: {
      address: 'smtp.gmail.com',
      port: '587',
      user_name: 'mail@gmail.com',
      password: '###########',
      authentication: :plain,
      domain: 'mail.google.com'
    },
    subject: 'New order',
    body: 'Check your admin page'
  )
end

所做的更改包括:

  • 将双引号更改为单引号(单引号,但使用字符串插值时除外)
  • 修复缩进(两个空格)
  • 修复哈希键(不要使用:key => value,请使用key: value
  • adress上的拼写固定为address
  • 删除多余的空格
  • 正确对齐块和闭包

Ruby Style Guide可以帮助您理解建议的更改。