Railsアプリの開発中に、ちょっと物によっては時間がかかる処理があったので、ActiveJobに処理を移行させたのですが、perform_now
とperform_later
でデータを保存した時のcreated_at
等が9時間ずれる現象が発生しました。
結論から書くと…
結論は、rails server
しているコンテナのTimezoneは'Asia/Tokyo'になっていたのですが、ActiveJobを処理するresqueを動かしているコンテナのTimezoneが未設定でした。
未設定だと、UTCになるのですが、Railsアプリケーション的には
config.active_record.default_timezone = :local config.time_zone = 'Tokyo'
となっていたので、Time.zone.now
などをActiveJobで行ってもずれていることもなく…。データ保存後に再取得してcreated_atを表示しても正しい値を出しているのに、rails sをしているコンテナ側からアクセスすると時間が9時間前になっているという状況で本当に参りました。
対処
docker-compose.ymlのresqueのところの環境変数TZ
に値を設定しました。
services: # 略 rails: # 略 environment: TZ: "/usr/share/zoneinfo/Asia/Tokyo" # 略 resque: # 略 environment: TZ: "/usr/share/zoneinfo/Asia/Tokyo" # 略