あんパン

こしあん派

Rails 4.2からのActiveJobでSidekiqをバックエンドにバックグラウンド実行する

Sidekiqとかdelayed_jobとかResqueとかいろいろあって、いままではそれぞれ書き方が違ったけどRails 4.2からできたActiveJobを使うと全て共通の書き方になりアダプタを変更するだけでバックエンドを変更できる。

だいたいここ通りにやれば動く。

tnakamura.hatenablog.com

Sidekiq::Webをmountして…みたいなのは実際不要だけど動作確認にはあってもよさそう。この記事どおりにやると動かなくて、require 'sidekiq/web'が必要。

あと、redisをローカル以外に置く場合もこの記事どおりだと動かなくてconfig/initializers/sidekiq.rbを作る必要がある。

Sidekiq.configure_server do |config|
  config.redis = { url: "redis://#{ENV['REDIS_SERVER_HOST']}:#{ENV['REDIS_SERVER_PORT']}", namespace: 'sidekiq'}
end

Sidekiq.configure_client do |config|
  config.redis = { url: "redis://#{ENV['REDIS_SERVER_HOST']}:#{ENV['REDIS_SERVER_PORT']}", namespace: 'sidekiq'}
end

こんな感じ。redisのhostとportを環境変数で与えてやると無事動く。localhost:6379にしたらローカルでも動く。

最初configure_serverしか設定してなくてジョブがenqueuedされるけど一向に実行されないみたいな現象起きて30分異常悩んだ。configure_client必要なので気をつけてください。