Ruby on rails NameError:未初始化的常量Smtpapi

Ruby on rails NameError:未初始化的常量Smtpapi,ruby-on-rails,ruby,heroku,Ruby On Rails,Ruby,Heroku,我正在将我的代码推送到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:i

我正在将我的代码推送到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'

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

由于这个错误是在ruby更新时出现的,所以可能是因为gems更新。这应该通过
Gemfile.lock
来防止,但是如果Gemfile包含任何提到windows的内容(
mswin
mingw
等),Heroku将忽略它

由于sendgrid重写了
sendgrid ruby
,gem本身已经有4年没有更新了。 最好的选择是遵循它们并更新代码。
但要让应用程序在运行之前运行,您可以显式锁定sendgrid ruby的版本:
gem'sendgrid ruby',“~>1.1.6”

什么是
Smtpapi
?它是从哪里来的?您使用的是gem吗?它是send grid sendgrid ruby(1.1.6)法拉第(~>0.9)mimemagic smtpapi(~>0.1)smtpapi(0.1.0)的一部分
class MyMailerHeader < Smtpapi::Header
    sendgrid-ruby (1.1.6)
      faraday (~> 0.9)
      mimemagic
      smtpapi (~> 0.1)
    smtpapi (0.1.0)