永田です。
弊社では Rails をつかって Relationというサービスを構築しています。 サービス内部では処理の効率化のために、非同期処理を様々な機能で使っています。 Rails 4から使えるようになった ActiveJob を Sidekiq で使っています。キューの管理は Redis を使っています。
ActiveJob ではメールの送信もおこなっています。
ActiveJob でメールの送信をおこなうようになってから1年以上は経ちますが最近、奇妙なエラーが発生しました。うちで発生したのは以下の2パターンでした。
uninitialized constant Mail::SMTPConnection
と
uninitialized constant Mail::AddressList::Address
これには悩まされましたが、mail gem の issue にてすでに議論されていました。
mail gem がスレッドセーフではなかったことが原因とのこと。対応策としては、この issue にも、Sidekiq の Wiki にも載っていますが、
Problems and Troubleshooting · mperham/sidekiq Wiki · GitHub
initializer 内のファイルに
Mail.eager_autoload!
とすることになります。