在 Ruby 上使用宝石小马发送邮件时出错



初始化.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

红宝石 2.5.1,小马 1.12。 我愿意: - 更新所有宝石; - 再次安装宝石小马; - 上下小马版

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

/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因此会引发异常。

在这种情况下,在 git 存储库中查看 gem 的源代码会有所帮助。首先要注意的是,该 gem 的最新版本是 1.12,而您使用的是 1.11。那么 1.11 和 1.12 之间发生了什么变化,它可以解决这个问题吗?

查看lib/pony.rb的历史,我看到 2017 年 11 月有一个名为"当 pony 与邮件 2.7.0 一起使用时修复 NoMethodError"的提交。此更改修改lib/pony.rb行 250 并更改body的方法调用。这是引发您描述的错误的代码和方法调用的确切行。

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

我注意到您说您使用的是 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(
  • 修复adressaddress的拼写
  • 删除多余的空格
  • 正确对齐块和闭合

Ruby 风格指南可以帮助理解建议的更改。

最新更新