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
相关产品推荐
相关产品推荐

