NameError:未初始化的常量Smtpapi

jdo*_*dog 3 ruby ruby-on-rails 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: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'
Run Code Online (Sandbox Code Playgroud)

我将Gemfile从Ruby 2.3更新为2.4,现在却遇到此错误?找不到解决方案。

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

class MyMailerHeader < Smtpapi::Header
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

Vas*_*fed 6

sendgrid-rubysmtpapi仅依赖于1.x版本,更高版本(包括当前的5.3.0)不依赖。

由于此错误是随ruby更新一起出现的-可能是由于gem更新引起的。这应该是可以避免的Gemfile.lock,但如果Gemfile中包含窗口(任何提及mswinmingw等等)的Heroku会忽略它。

由于sendgrid重写了,宝石本身至今尚未更新4年sendgrid-ruby。最好的选择是跟随他们并更新您的代码。但是要使应用程序在运行之前运行-您可以显式锁定sendgrid-ruby的版本:gem 'sendgrid-ruby', '~>1.1.6'