我刚刚将ActionMailer配置为使用SendGrid,以便我可以将它与Devise电子邮件一起使用。电子邮件部分工作正常,但现在我无法完成迁移。我得到的错误是' TypeError:Mail不是模块'并显示在下面的代码块中。
$ rake db:migrate
rake aborted!
TypeError: Mail is not a module
.../ruby-2.3.4/gems/mail-2.7.0/lib/mail.rb:3:in `<top (required)>'
.../ruby-2.3.4/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `require'
.../ruby-2.3.4/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `block in require'
.../ruby-2.3.4/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:259:in `load_dependency'
.../ruby-2.3.4/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `require'
我认为这个问题与ActionMailer gem依赖于Mail gem(包括在mail.rb:3上调用的邮件&#39;模块)这一事实有关。 ,还有一些叫做“邮件”的课程。 in&#39; devise / test / mailers / email_changed_test.rb&#39;和&#39; devise / test / mailers / confirmation_instructions_test.rb&#39;同样。
也许这个冲突是由rails / gem版本不兼容引起的? (我使用rails 5.0.4,邮件2.7.0,设计4.3.0。)或者我可能完全忽略了这一点?
答案 0 :(得分:0)
我在这里找到了答案: https://github.com/sendgrid/sendgrid-ruby/blob/master/TROUBLESHOOTING.md#rails-specifics
Rails自己的Mail
类和sendgrid类Mail
之间的命名空间冲突。为避免该问题,请改用SendGrid::Mail
。
sendgrid类Email
与您自己定义的Email
类之间发生名称空间冲突的可能性。为避免这些问题,您可以跳过include SendGrid
行,并为电子邮件使用SendGrid::
前缀。请参阅此SO答案以获取详细信息。