Rails 7 Ruby 3.1 LoadError:无法加载此类文件--net/smtp

Ser*_*eev 80 ruby ruby-on-rails ruby-on-rails-7 ruby-3.1

我升级到 Rails 7 和 Ruby 3.1。在尝试运行测试时,rspec我收到以下错误。我该如何修复它?

An error occurred while loading rails_helper.
Failure/Error: require File.expand_path('../config/environment', __dir__)

LoadError:
  cannot load such file -- net/smtp
# .../gems/mail-2.7.1/lib/mail.rb:9:in `<module:Mail>'
# .../gems/mail-2.7.1/lib/mail.rb:3:in `<main>'
# .../bundler/gems/rails-6a0f6c4d70b1/actionmailbox/lib/action_mailbox/mail_ext.rb:3:in `<main>'
# .../bundler/gems/rails-6a0f6c4d70b1/actionmailbox/lib/action_mailbox.rb:3:in `<main>'
# .../bundler/gems/rails-6a0f6c4d70b1/actionmailbox/lib/action_mailbox/engine.rb:9:in `<main>'
# ./config/application.rb:11:in `<top (required)>'
# ./config/environment.rb:2:in `require_relative'
# ./config/environment.rb:2:in `<top (required)>'
# ./spec/rails_helper.rb:4:in `require'
# ./spec/rails_helper.rb:4:in `<top (required)>'
Run Code Online (Sandbox Code Playgroud)

(bootsnap 和 zeitwerk 被排除在回溯之外)

Ser*_*eev 162

对于轨道 6

添加gem 'net-smtp', require: false到您的Gemfile并运行bundle.

同样,我假设您可能遇到net-imap和问题net-pop,因此必须添加它们,直到mail发布新的gem 版本。

gem 'net-smtp', require: false
gem 'net-imap', require: false
gem 'net-pop', require: false
Run Code Online (Sandbox Code Playgroud)

更新:邮件 gem 版本 2.8.0 于 2022 年 12 月 3 日发布,其中包含修复程序。只需升级到 >= 2.8.0。

对于 Rails 7

2022 年 1 月 6 日,Rails 7.0.1发布

此版本的重点是支持 Ruby 3.1

在其他与 Ruby 3.1 相关的问题中,它修复了这个问题。因此升级到 Rails >= 7.0.1


相关拉取请求和问题:

  • 从 6.0.x 升级到 Rails 6.1.x 时遇到了一个问题,我添加了所有三个 gem,因为 require false 并且我的生产站点正常工作。谢谢你! (4认同)

Siw*_*申思维 14

我在生产模式下运行 Rails 时遇到了同样的问题。(Ruby 3、Rails 6.1)

复制这行代码并将其粘贴到Gemfile

gem 'net-smtp', require: false
gem 'net-imap', require: false
gem 'net-pop', require: false
Run Code Online (Sandbox Code Playgroud)