首页 > 解决方案 > NameError: 未初始化的常量 Smtpapi

问题描述

我很想将我的代码推送到 Heroku,但构建失败了

 NameError: uninitialized constant Smtpapi
    /tmp/build_0ce2a697c4ef6c16626b01b82d9463f3/app/helpers/my_mailer_header.rb:1:in `<top (required)>'
    /tmp/build_0ce2a697c4ef6c16626b01b82d9463f3/lib/api_v1/users.rb:3:in `<top (required)>'
    /tmp/build_0ce2a697c4ef6c16626b01b82d9463f3/lib/api_v1/mymedical.rb:3:in `<class:Mymedical>'
    /tmp/build_0ce2a697c4ef6c16626b01b82d9463f3/lib/api_v1/mymedical.rb:1:in `<top (required)>'
    /tmp/build_0ce2a697c4ef6c16626b01b82d9463f3/config/routes.rb:1:in `<top (required)>'
    /tmp/build_0ce2a697c4ef6c16626b01b82d9463f3/vendor/bundle/ruby/2.4.0/gems/railties-4.2.11/lib/rails/application/routes_reloader.rb:40:in `block in load_paths'

我将我的 Gemfile 从 Ruby 2.3 更新到 2.4,现在我收到了这个错误?找不到解决方案。

这似乎是导致问题的代码。

class MyMailerHeader < Smtpapi::Header

Ruby 2.4.2 中不存在 Smtpapi 吗?

Smtpapi 是 Send-Grid gem 和其他一些 gem 的一部分。

    sendgrid-ruby (1.1.6)
      faraday (~> 0.9)
      mimemagic
      smtpapi (~> 0.1)
    smtpapi (0.1.0)

标签: ruby-on-railsrubyheroku

解决方案


sendgrid-ruby仅依赖smtpapi于版本 1.x,包括当前 5.3.0 在内的更高版本不依赖。

由于此错误是随着 ruby​​ 更新而出现的 - 这可能是由于 gems 更新造成的。这应该被 阻止Gemfile.lock,但如果 Gemfile 包含任何提及 windows (mswinmingw),Heroku 将忽略它。

gem 本身已经 4 年没有更新了,因为 sendgrid 重写了sendgrid-ruby. 最好的选择是关注他们并更新您的代码。但是要让应用程序在您执行此操作之前运行 - 您可以显式锁定 sendgrid-ruby 的版本:gem 'sendgrid-ruby', '~>1.1.6'


推荐阅读