CentOS 8生产环境Ruby 2.6.2/Rails 6.1.4邮件发送失败求助
解决方案:生产环境
Mail::TestMailer未初始化错误 针对你遇到的问题,核心原因是生产环境意外加载了仅用于开发/测试的TestMailer类,下面是具体排查和修复步骤:
检查生产环境邮件配置
打开config/environments/production.rb,确认没有以下测试相关配置:config.action_mailer.delivery_method = :test同时确保生产环境的SMTP等邮件发送配置正确,没有引用
TestMailer相关代码。排查业务代码中的邮件调用
全局搜索项目代码,确认所有发送邮件的逻辑在生产环境下没有调用TestMailer,比如有没有写错环境判断条件(比如误把Rails.env.development?写成Rails.env.production?),导致生产环境走了测试邮件分支。验证Passenger的Ruby环境配置
因为你用了RVM gemset,必须确保Passenger加载的是正确的Ruby版本和gemset:- 在服务器上执行
rvm use 2.6.2@rails6.1.4,再运行which ruby拿到Ruby的完整路径 - 在Apache的虚拟主机配置中添加或修改:
PassengerRuby /path/to/your/ruby-2.6.2@rails6.1.4/wrappers/ruby SetEnv RAILS_ENV production - 重启Apache服务:
systemctl restart httpd
- 在服务器上执行
确保生产环境未加载测试组Gem
检查Gemfile,确认测试相关的Gem都放在group :test块内:group :test do # 比如rspec-rails、capybara等测试依赖 end然后在生产环境重新安装Gem,排除测试/开发组:
bundle install --without test development --deployment清理生产环境缓存
执行以下命令清除缓存,避免旧的配置残留:rails assets:clean RAILS_ENV=production rails cache:clear RAILS_ENV=production touch tmp/restart.txt # 触发Passenger重启应用
内容的提问来源于stack exchange,提问作者Mandres
相关产品推荐
相关产品推荐

