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

标签 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。 我愿意: - 更新所有 gem ; - 再次安装 gem Pony; - 上下小马版本

最佳答案

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

/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 的源代码中,在文件 lib/pony.rb 的第 250 行尝试调用方法 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 或者如果您使用的是 bundler 然后 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)
  • address 的拼写修复为 address
  • 删除多余的空格
  • 正确对齐 block 和闭包

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

关于ruby - 在 Ruby 上使用 gem pony 发送邮件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52410357/

相关文章:

ruby - 我如何在 Bluemix 中升级 Rubygems?

ruby-on-rails - 服务器上的 Ruby gem 位于何处?

ruby - 解析 Ruby 时查找数字模式

ruby - 为什么清除我的哈希值时也会清除我的哈希值数组?

ruby-on-rails - 在 Aptana/Eclipse 中调试 Rails 应用程序

arrays - 这是 DBSCAN 算法的预期行为吗(两个相同的数据样本不适契约(Contract)一簇)?

ruby-on-rails - 在 pg_search 查询后列出可搜索值

ruby - 使用 rbenv install 安装 ruby​​ 2.0.0-p0 后 gem 检查错误(已注册但缺少 gems)

ruby - `&&=` 的用例

ruby-on-rails - rails 2.3.0 - Gem :Module (NoMethodError) 的未定义方法 `activate_bin_path'