You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActionMailer::MailDeliveryJob无法加载Railgun类但控制台可正常加载

解决ActionMailer::MailDeliveryJob无法识别::Railgun::Mailer的问题

控制台能正常加载::Railgun::Mailer但后台Job报错,核心原因是Rails后台Job运行环境未自动加载到该类——控制台会主动加载未定义的常量,但Resque这类后台Worker不会自动触发加载。以下是可行的解决方法:

1. 显式引入类

在使用::Railgun::Mailer的email_provider.rb文件顶部,手动引入该类:

# /opt/abc-web/app/models/email_provider.rb
require 'railgun/mailer'
# 若类属于Rails引擎或需要依赖加载,改用:
# require_dependency 'railgun/mailer'

2. 配置自动加载路径

如果Railgun是项目内部模块,检查config/application.rb,确保其所在目录被加入自动/预加载路径。比如Railgun在lib/railgun下:

# config/application.rb
config.autoload_paths << Rails.root.join('lib')
config.eager_load_paths << Rails.root.join('lib')

修改后必须重启Resque Worker才能生效。

3. 让Resque Worker预加载类

在Resque初始化文件(如config/initializers/resque.rb)中添加钩子,让Worker启动时加载类:

Resque.before_fork do
  require 'railgun/mailer'
end

4. 校验类文件路径

确保Railgun::Mailer的文件路径符合Rails自动加载规则:

  • 类Railgun::Mailer对应的文件应为app/mailers/railgun/mailer.rb或lib/railgun/mailer.rb
  • 文件名严格遵循“驼峰类名转蛇形”的规则

修改完成后,重启Resque Worker并重新触发邮件Job,验证是否解决报错。

内容的提问来源于stack exchange,提问作者Julien Lamarche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:55:19