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)
sendgrid-rubysmtpapi仅依赖于1.x版本,更高版本(包括当前的5.3.0)不依赖。
由于此错误是随ruby更新一起出现的-可能是由于gem更新引起的。这应该是可以避免的Gemfile.lock,但如果Gemfile中包含窗口(任何提及mswin,mingw等等)的Heroku会忽略它。
由于sendgrid重写了,宝石本身至今尚未更新4年sendgrid-ruby。最好的选择是跟随他们并更新您的代码。但是要使应用程序在运行之前运行-您可以显式锁定sendgrid-ruby的版本:gem 'sendgrid-ruby', '~>1.1.6'